图像为16bpp时,从位图获取彩色图像灰度
问题1。 My own Related problem图像为16bpp时,从位图获取彩色图像灰度
我在这里问下一个问题
现在的问题2号是。
当我试图从他们的原始像素数据打开16位(Monocrome)图像 然后我得到错误。 因为我使用PixelFormat.Format16bppGrayscale上创建位图的像
Bitmap bmp = new Bitmap(Img_Width, Img_Height,PixelFormat.Format16bppGrayscale);
所以google搜索,发现不支持Format16bppGrayscale,所以我体改我的代码如下图所示。
PixelFormat format = PixelFormat.Format16bppRgb565;
Bitmap bmp = new Bitmap(Img_Width, Img_Height, format);
Rectangle rect = new Rectangle(0, 0, Img_Width, Img_Height);
BitmapData bmpData = bmp.LockBits(rect, ImageLockMode.ReadWrite, format);
Marshal.Copy(rawPixel, 0, bmpData.Scan0, rawPixel.Length);
bmp.UnlockBits(bmpData);
令人惊讶的是,我现在正在获取图像,因为我改变了pixelFormat。 但问题是,我的单色(灰度)图像看起来不同的颜色。
我怎样才能得到原始的外观。我尝试了几种灰度方法,但不成功 请给我一些不安全的代码。 谢谢,
BobPowell's GDI+ FAQ has a bit about greyscale。 .Net中的16bpp只是不起作用。我必须在32bpp中完成所有工作,并使用外部工具进行转换。幸运的是(?)我大部分时间都坚持使用TIFF图像。另外,this thread可能会有所帮助。
我以前看过那篇文章。 我看到BobPowell常见问题,并尝试该代码。 图像颜色只是更改为一些随机颜色,但不是灰度。 我也从字节码中看到了这篇文章。 他在问我同样的事情。 我也在为医疗图像工作。 – prashant 2009-04-29 06:02:24
您需要将托盘更改为灰度托盘。 8bppIndexed的默认托盘是256色。你可以这样改变它:
ColorPalette pal = myBitmap.Palette;
for (int i = 0; i < pal.Entries.Length; i++)
pal.Entries[i] = Color.FromArgb(i, i, i);
myBitmap.Palette = pal;
这有帮助吗? http://www.eggheadcafe.com/forumarchives/NETFrameworkdrawing/Nov2005/post24405677.asp – hometoast 2009-04-29 11:32:21