2009-04-28 217 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; 
相關問題