首页 > 其他 > 详细

32位BMP带通道的透明图转化24位BMP带通道透明图问题

时间:2014-04-11 09:08:01      阅读:608      评论:0      收藏:0      [点我收藏+]

首先说明谁说BMP不可以透明?别这么和我说我已经用PS的通道实现了但问题来了,我现在只能保存32位的带通道的透明BMP文件,我如何保存24位的BMP仍然可以带通道透明效果以下是在网上已经有人解决的方法,不过我不搞编程。这东西实在是看不懂,如果有明白的可以说下是在什么东西里,编写什么命令语句最好

 

---------------------------------------------------------------------

 

RGB24  

  RGB24使用24位来表示一个像素,RGB分量都用8位表示,取值范围为0-255。注意在内存中RGB各分量的排列顺序为:BGR BGR BGR…。通常可以使用RGBTRIPLE数据结构来操作一个像素,它的定义为:  

typedef struct tagRGBTRIPLE {

  BYTE rgbtBlue; // 蓝色分量

  BYTE rgbtGreen; // 绿色分量

  BYTE rgbtRed; // 红色分量

  } RGBTRIPLE;

 

 

RGB32

  RGB32使用32位来表示一个像素,RGB分量各用去8位,剩下的8位用作Alpha通道或者不用。(ARGB32就是带Alpha通道的RGB32。)注意在内存中RGB各分量的排列顺序为:BGRA BGRA BGRA…。通常可以使用RGBQUAD数据结构来操作一个像素,它的定义为:  typedef struct tagRGBQUAD {

  BYTE rgbBlue; // 蓝色分量

  BYTE rgbGreen; // 绿色分量

  BYTE rgbRed; // 红色分量

  BYTE rgbReserved; // 保留字节(用作Alpha通道或忽略)

  } RGBQUAD。

就是多了一个透明通道,直接右移8为丢掉这个8位信息就可以了

----------------------------------------------------------------------------

所以只要移除透明的分量就ok:

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
case 32:
        {
            // 对于32位图像,丢弃透明部分数据
            // 读取数据文件
            int size = (bih.biWidth*4+nAdjust24)*bih.biHeight;
            data= new BYTE[size];
            pData24 = new BYTE[size];
            fseek(f,bfh.bfOffBits,SEEK_SET);   
            fread(data,size,1,f);
            fclose(f);
            for (j=0;j<bih.biHeight;j++){
                for (i = 0;i<bih.biWidth;i++)
                {
                    // 只保存 RGB,不处理 alpha
                    pData24[j*(bih.biWidth*3+nAdjust24)+i*3] = data[j*(bih.biWidth*4+nAdjust24)+i*4+2];
                    pData24[j*(bih.biWidth*3+nAdjust24)+i*3+1] = data[j*(bih.biWidth*4+nAdjust24)+i*4+1];
                    pData24[j*(bih.biWidth*3+nAdjust24)+i*3+2] = data[j*(bih.biWidth*4+nAdjust24)+i*4];
                }
            }
            nComponent = 3;
            break;
        }

 

 

 

32位BMP带通道的透明图转化24位BMP带通道透明图问题,布布扣,bubuko.com

32位BMP带通道的透明图转化24位BMP带通道透明图问题

原文:http://www.cnblogs.com/moonlight-fly/p/3657674.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!