c# - 如何直接定义一个 8 位灰度图像?

标签 c# bitmap

以下代码用于创建8位位图

Bitmap b = new Bitmap(columns, rows, PixelFormat.Format8bppIndexed);
BitmapData bmd = b.LockBits(new Rectangle(0, 0, columns, rows), ImageLockMode.ReadWrite, b.PixelFormat);

但是当我保存它时,它被保存为 8 位彩色位图。是否可以直接创建 8 位灰度位图,而无需创建 8 位彩色位图,然后再将其转换为灰度?

最佳答案

我刚刚遇到这个问题并在this的帮助下解决了它.

但我会把我的快速解决方案放在这里,希望对你有帮助。
BITMAP 文件包含四个部分,一个是调色板,它决定了颜色应该如何显示。所以在这里我们修改位图文件的调色板:

myBMP = new Bitmap(_xSize, _ySize, _xSize, System.Drawing.Imaging.PixelFormat.Format8bppIndexed, _pImage);
//_pImage is the pointer for our image
//Change palatte of 8bit indexed BITMAP. Make r(i)=g(i)=b(i)
ColorPalette _palette = myBMP.Palette;
Color[] _entries = _palette.Entries;
for (int i = 0; i < 256; i++)
{
    Color b = new Color();
    b = Color.FromArgb((byte)i, (byte)i, (byte)i);
    _entries[i] = b;
}
myBMP.Palette = _palette;
return myBMP;

关于c# - 如何直接定义一个 8 位灰度图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8603596/

相关文章:

javascript - 通过 JavaScript 接口(interface)将图像从 Android 传递到 HTML (WebView)

c# - 在 asp.net (c#) 中使用错误的文件名保存来自 SQL Server 的 Blob

c# - MS CRM - 预创建插件不会更改属性值

c# - 从 VisualStudio 2005 升级到 2010(对于 WinForms 项目)是否容易/安全?

c# - 初始化按钮

C# 以编程方式访问 Excel 宏

android - 无法将位图转换为 Uri

android recycler View 适配器、viewpagers、数据库、位图和内存不足错误

android - ImageView 内存泄漏 - 简单图像

android - 在解码位图时捕获 OutOfMemoryError