转为24位RGB灰度格式:
此方法讨论过程及实例,见贴:C#如何将【记录了图片信息的二进制文件】转为正常可打开的图片文件?
private void button2_Click(object sender, EventArgs e)
{
var data = File.ReadAllBytes(@"输入文件路径.raw");
int w = 1240;
int h = 1210;
Bitmap bitm = new Bitmap(w, h, PixelFormat.Format24bppRgb); //构建位图框架,24位格式(这里可以更改位深)
int i = 0;
for (var y = 0; y < h; y++)
{
for (var x = 0; x < w; x++)
{
var n = data[i++];
bitm.SetPixel(x, y, Color.FromArgb(n, n, n)); //逐像素赋值 (只有4个参数时,才与ARGB32位格式匹配)
}
}
pictureBox1.Image = bitm;
pictureBox1.Refresh(); //更新显示内容
bitm.Save(@"输出文件路径.png", System.Drawing.Imaging.ImageFormat.Png);
}
转为8位调色板(Palette)灰度格式 (此格式占用空间小):
private void button3_Click(object sender, EventArgs e)
{
var ImageData = File.ReadAllBytes(@"输入文件路径.raw");
int imageWidth = 1240;
int imageHeight = 1210;
//数组转换为Intptr
IntPtr pData = Marshal.AllocHGlobal(imageWidth * imageHeight);
Marshal.Copy(ImageData, 0, pData, imageWidth * imageHeight);
//创建灰度位图
Bitmap bmp = new Bitmap(imageWidth, imageHeight, imageWidth, PixelFormat.Format8bppIndexed, pData);
//修改位图的调色板
ColorPalette palette = bmp.Palette;
for (int i = 0; i < 256; i++)
{
palette.Entries[i] = Color.FromArgb(i, i, i);
}
bmp.Palette = palette;
//显示、保存
pictureBox1.Image = bmp;
pictureBox1.Refresh();
bmp.Save(@"输出文件路径.bmp", ImageFormat.Bmp);
}