转换8位色的BMP图像到8位灰度BMP
这是我的位图对象转换8位色的BMP图像到8位灰度BMP
Bitmap b = new Bitmap(columns, rows, PixelFormat.Format8bppIndexed);
BitmapData bmd = b.LockBits(new Rectangle(0, 0, columns, rows), ImageLockMode.ReadWrite, b.PixelFormat);
如何转换成8位灰度位图呢?
嗨,你可以尽管下面的代码是Vb.net调色板更改为灰度一个
。你可以很容易地将其转换为C#
Private Function GetGrayScalePalette() As ColorPalette
Dim bmp As Bitmap = New Bitmap(1, 1, Imaging.PixelFormat.Format8bppIndexed)
Dim monoPalette As ColorPalette = bmp.Palette
Dim entries() As Color = monoPalette.Entries
Dim i As Integer
For i = 0 To 256 - 1 Step i + 1
entries(i) = Color.FromArgb(i, i, i)
Next
Return monoPalette
End Function
原文出处 - >http://social.msdn.microsoft.com/Forums/en-us/vblanguage/thread/500f7827-06cf-4646-a4a1-e075c16bbb38
除非原始图像的调色板已经按照某种完整的奇迹按亮度排序,否则只需将该调色板分配给图像即可完全解决问题。 – Nyerguds 2018-01-09 08:15:56
喜欢的东西:
Bitmap b = new Bitmap(columns, rows, PixelFormat.Format8bppIndexed);
for (int i = 0; i < columns; i++)
{
for (int x = 0; x < rows; x++)
{
Color oc = b.GetPixel(i, x);
int grayScale = (int)((oc.R * 0.3) + (oc.G * 0.59) + (oc.B * 0.11));
Color nc = Color.FromArgb(oc.A, grayScale, grayScale, grayScale);
b.SetPixel(i, x, nc);
}
}
BitmapData bmd = b.LockBits(new Rectangle(0, 0, columns, rows), ImageLockMode.ReadWrite, b.PixelFormat);
是的,没有必要改变的像素,只是调色板是罚款。 ColorPalette是片状型,此示例代码运行良好:
var bmp = Image.FromFile("c:/temp/8bpp.bmp");
if (bmp.PixelFormat != System.Drawing.Imaging.PixelFormat.Format8bppIndexed) throw new InvalidOperationException();
var newPalette = bmp.Palette;
for (int index = 0; index < bmp.Palette.Entries.Length; ++index) {
var entry = bmp.Palette.Entries[index];
var gray = (int)(0.30 * entry.R + 0.59 * entry.G + 0.11 * entry.B);
newPalette.Entries[index] = Color.FromArgb(gray, gray, gray);
}
bmp.Palette = newPalette; // Yes, assignment to self is intended
if (pictureBox1.Image != null) pictureBox1.Image.Dispose();
pictureBox1.Image = bmp;
其实我不建议您使用此代码,索引的像素格式是对付一个皮塔。您可以在this answer中找到快速且更一般的彩色灰度转换。
请注意,如果您想要进行与现代HDTV相同的转换,您需要使用Rec。转换的709个系数。上面提供的(.3,.59,.11)(几乎)是Rec。 601(标准def)系数。建议709个系数是灰度= 0.2126 R'+ 0.7152 G'+ 0.0722 B',其中R',G'和B'是伽马调整的红色,绿色和蓝色分量。
为什么你使用'LockBits'? – Oded 2011-12-18 20:10:50
http://www.bobpowell.net/grayscale.htm – Oded 2011-12-18 20:12:59
不要忘记标记答案被接受,在你检查后看看是否适合你。虽然所有的答案都基本相同 – 2011-12-28 08:59:40