簡體   English   中英

用16位灰度值填充位圖,而無需縮小

[英]Fill bitmap with 16 bit grayscale values without downscale

我有一個包含原始圖像數據的文件。 每個像素都表示為16 bit (0-65536)值。

我正在將所需的數據部分讀取到ushort[]數組中。 經過一些圖像處理后,我需要以某種方式將該圖像顯示給用戶。 我繪制8位灰度沒有問題(我只是將每個像素的R,G和B值都設置為相同),但無法處理16位/像素的灰度圖像。

另一個可能性是使用PixelFormat.Format48bppRgb並將r,g和b設置為相同的16位grascale,但是我找不到方法。

我發現了一些使用unsafe代碼和LockBits代碼片段,但無法使它們正常工作。

有什么方法可以繪制16位灰度圖像而不將其縮小到8位?

請向我提供一個代碼段。

編輯:這就是我設置8位磅秤的方式:

Array img;
//var data = bmp.LockBits(new Rectangle(0, 0, bmp.Width, bmp.Height), ImageLockMode.ReadWrite, bmp.PixelFormat);
if (bitsPerElement == 8)
{
    //img = Array.CreateInstance(typeof(byte), bitmapHeigth*bitmapWidth);
    img = GetLayerBytes<byte>(LayerNum) as byte[];
}
else
{
    img = GetLayerBytes<UInt16>(LayerNum) as UInt16[];
}

int ind = 0;
for (int heigth = 0; heigth < bitmapHeigth; heigth++)
{
    for (int width = 0; width < bitmapWidth; width++)
    {
        int current = Convert.ToInt32(img.GetValue(ind));
        ind++;

        bmp.SetPixel(width, heigth, Color.FromArgb(current, current, current));
    }
}
pictureBox1.Image = bmp;

如果有人正在尋找答案,請引用Hans Passant的話:

這些像素格式是在GDI +中定義的,期望有朝一日,隨着顯示技術的充分發展,它可能會很有用。 我們仍在等待。 實際上,LCD面板無法以24rgb格式顯示所有可能的1600萬種顏色,因此發生了另一種變化。 實際上,以16位格式查看灰度級需要專用的硬件和訓練有素的眼睛,就像您在醫院中看到的那樣。 具有匹配的非標准圖像格式,例如DICOM。 您可以從諸如Lead Tools之類的供應商處購買。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM