2009-04-28 176 views
2

问题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。 但问题是,我的单色(灰度)图像看起来不同的颜色。

我怎样才能得到原始的外观。我尝试了几种灰度方法,但不成功 请给我一些不安全的代码。 谢谢,

+0

这有帮助吗? http://www.eggheadcafe.com/forumarchives/NETFrameworkdrawing/Nov2005/post24405677.asp – hometoast 2009-04-29 11:32:21

回答

2

BobPowell's GDI+ FAQ has a bit about greyscale。 .Net中的16bpp只是不起作用。我必须在32bpp中完成所有工作,并使用外部工具进行转换。幸运的是(?)我大部分时间都坚持使用TIFF图像。另外,this thread可能会有所帮助。

+0

我以前看过那篇文章。 我看到BobPowell常见问题,并尝试该代码。 图像颜色只是更改为一些随机颜色,但不是灰度。 我也从字节码中看到了这篇文章。 他在问我同样的事情。 我也在为医疗图像工作。 – prashant 2009-04-29 06:02:24

0

您需要将托盘更改为灰度托盘。 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; 
相关问题