我打开不同类型的图像(如8位和16位),它们是(Monocrome,RGB,调色板颜色)。如何在C#中的位图图像上应用颜色012
我有这些图像的原始像素数据。 我为8位图像创建这样的位图。
//for monocrome images i am passing PixelFormat.Format8bppIndexed.
//for RGB images i am passing PixelFormat.Format24bppRgb
PixelFormat format = PixelFormat.Format8bppIndexed;
Bitmap bmp = new Bitmap(Img_Width, Img_Height,format);
Rectangle rect = new Rectangle(0, 0, Img_Width, Img_Height);
//locking the bitmap on memory
BitmapData bmpData = bmp.LockBits(rect, ImageLockMode.ReadWrite, format);
// copy the managed byte array to the bitmap's image data
Marshal.Copy(rawPixel, 0, bmpData.Scan0, rawPixel.Length);
bmp.UnlockBits(bmpData);
的问题是,当我绘制bmp图象然后它不同于在颜色上比原。 那么有什么办法可以将lut(查找表)应用于那些彩色图像上。
我想要任何不安全的代码,因为我尝试了getixel和setPixel,它们非常慢。 我也不想要Image.fromSource()方法。
我看到了,但对于RGB图像Image.palette是0. 我得到Image.Palette = 256的情况下,单色和调色板的彩色图像。 但是对于调色板彩色图像,我怎样才能分别得到RGB字节数组 以及如何应用Image.Palette。 我试过了,但是假设原始图像是绿色的。 而我从我的代码中获取图像颜色紫罗兰色。 那么它会给出原始的绿色,如果我将采取单独的RGB和适用于Image.palette。 谢谢 – prashant 2009-04-29 06:16:30
我不知道你从哪里得到你的源数据,但你应该能够这样写入调色板:bmp.Palette.Entries [0] .r = red_value;等等。ImagePalette是一个“ColorPalette”对象,不仅仅是条目的数量。 – Alnitak 2009-04-29 06:33:41
谢谢, 第一个ColorPalette是密封类,所以你不能从自己的调色板。如果图像没有。 bmp.Palette是一个属性,但不能为此设置直接值。 因为如果bmp.Palette = 0,所以他们没有任何条目。 所以,如果你试图bmp.Palette.Entries [我]给你无限的例外。 如果要设置bmp.Palette.Entries [i] .R是只读属性。 – prashant 2009-04-30 06:18:54