C# 如何读取8位位图的RGB值 16,24,32位的位图信息的RGB值比较好读但是8位图,是记录的调色板索引值,怎么读取出索引值,然后根据索引值取出RGB值呢谢谢提供思路 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 Bitmap myBitmap = new Bitmap(tempImage); for (int i = 0; i < myBitmap.Width; i++) { for (int j = 0; j < myBitmap.Height; j++) { Color tempColor = myBitmap.GetPixel(i, j); int tempInt=(tempColor.R + tempColor.G + tempColor.B) / 3 ; Color c = Color.FromArgb(tempInt, tempInt, tempInt); myBitmap.SetPixel(i, j, c); } } myBitmap.Save(imageName, System.Drawing.Imaging.ImageFormat.Bmp); myBitmap.Dispose(); 对于8位位图文件:文件开头是文件头typedef struct tagBITMAPFILEHEADER { // bmfh WORD bfType; DWORD bfSize; WORD bfReserved1; WORD bfReserved2; DWORD bfOffBits; } BITMAPFILEHEADER;其中bfOffBits是图像数据相对于文件开始处的偏移量,可以根据这个值定位到图像数据,每个点的值是一个调色板的索引。接下来是位图信息typedef struct tagBITMAPINFO { BITMAPINFOHEADER bmiHeader; RGBQUAD bmiColors[1];} BITMAPINFO;其中bmiColors存放的是调色板,可以把调色板读到一个数组中,然后根据每个点的索引值找到对应的颜色。需要注意的问题是,RGBQUAD结构中的颜色顺序是BGR,而不是平常的RGB。 typedef struct tagRGBQUAD { // rgbq BYTE rgbBlue; BYTE rgbGreen; BYTE rgbRed; BYTE rgbReserved; } RGBQUAD; 我一般是采用这种方法:将它读到BITMAP里,然后全部按照24位的方法来读。虽然空间稍大一点,但是算法通用,算是开发和运行效率的平衡点吧。 C#程序在运行时,出现尝试读取或写入受保护的内存。这通常指示其他内存已损坏 C#中用一个dataGridView控件如何显示两个表里的数据? C#中遇到需要多继承的情况怎么办? 水晶报表部署的问题。头大的都快爆了 数据库问题 如何估算一个方法的运行时间 这段话能不能用linq搞定? 碰到怪事:界面上的ComboBox点击后无法获得焦点 谁有《.net高级编程>>? 求遍历网页新链接的方法 地图编辑器的地图怎么用啊 windows服务怎么自己停止自己?
{
for (int j = 0; j < myBitmap.Height; j++)
{
Color tempColor = myBitmap.GetPixel(i, j); int tempInt=(tempColor.R + tempColor.G + tempColor.B) / 3 ; Color c = Color.FromArgb(tempInt, tempInt, tempInt); myBitmap.SetPixel(i, j, c); }
}
myBitmap.Save(imageName, System.Drawing.Imaging.ImageFormat.Bmp);
myBitmap.Dispose();
文件开头是文件头
typedef struct tagBITMAPFILEHEADER { // bmfh
WORD bfType;
DWORD bfSize;
WORD bfReserved1;
WORD bfReserved2;
DWORD bfOffBits;
} BITMAPFILEHEADER;
其中bfOffBits是图像数据相对于文件开始处的偏移量,可以根据这个值定位到图像数据,每个点的值是一个调色板的索引。接下来是位图信息
typedef struct tagBITMAPINFO {
BITMAPINFOHEADER bmiHeader;
RGBQUAD bmiColors[1];
} BITMAPINFO;
其中bmiColors存放的是调色板,可以把调色板读到一个数组中,然后根据每个点的索引值找到对应的颜色。
需要注意的问题是,RGBQUAD结构中的颜色顺序是BGR,而不是平常的RGB。
typedef struct tagRGBQUAD { // rgbq
BYTE rgbBlue;
BYTE rgbGreen;
BYTE rgbRed;
BYTE rgbReserved;
} RGBQUAD;