24色的bmp每一像素是8位r+8位g+8位b一共需要24位来存储一个像素 比如红色就是FF0000
16位的bmp每一像素用16位表示,具体是5位r+6位g+5位b,这个就可点搞
我现在需要一个算法来转换它们
比如定义一个unsigned char 24bit[3]表示24位的一个像素,unsigned char 16bit[2]表示16位的一个像素
怎么写呢,请教高手,不胜感激
16位的bmp每一像素用16位表示,具体是5位r+6位g+5位b,这个就可点搞
我现在需要一个算法来转换它们
比如定义一个unsigned char 24bit[3]表示24位的一个像素,unsigned char 16bit[2]表示16位的一个像素
怎么写呢,请教高手,不胜感激
解决方案 »
- HTTPS网站模拟登录
- GetForegroundWindow()与GetActiveWindow的区别
- VC新手求救,如能解决不胜感激!!!
- 关于替换windows系统的MSGINA.dll的问题
- vc6.0中的状态栏为什么不显示文字
- EDIT BOX在win32下使用时的滚动条问题
- 大哥们,程序出现这种错误,该怎么查啊???SLMonitor.exe 中的 0xcdcdcdcd 处未处理的异常:0xC0000005: 读取位置 0xcdcdcdcd 时发生访
- 如何将一个类的成员函数地址赋给同一个类的函数指针?
- 不显示删除回复显示所有回复显示星级回复显示得分回复 为啥在另一台电脑上会出现“Failed to create empty document”
- 关于CFileDialog对话框上的按钮
- 求助:关于COM调用的古怪问题
- 新手请教几个问题
http://www.csdn.net/cnshare/soft/10/10423.shtm
http://www.codeproject.com/bitmap/graphicsuite.asp具体代码:
void S_Gray(Graphics::TBitmap *Bmp)//灰阶效果
{
long Gray;
BYTE *ptr;
for (int y = 0; y < Bmp->Height; y++)
{
ptr =(BYTE *) Bmp->ScanLine[y];
for (int x = 0; x < Bmp->Width*3; x+=3){
Gray=299*ptr[x+2]+587*ptr[x+1]
+114*ptr[x];
ptr[x]=BYTE(Gray/1000);
ptr[x+1]=BYTE(Gray/1000);
ptr[x+2]=BYTE(Gray/1000);
}
}
}希望能对你有所帮助!!
G = (Value & 0x000007E0) >> 3;
B = (Value & 0x0000001F) << 3;Value = (R & 0x000000F8) << 8 | (G & 0x000000FC) << 3 | (B & 0x000000F8) >> 3;