首頁 > 後端開發 > C++ > 如何將影像轉換為 16 位元灰階?

如何將影像轉換為 16 位元灰階?

Barbara Streisand
發布: 2025-01-17 12:52:10
原創
306 人瀏覽過

How to Convert an Image to 16-Bit Grayscale?

16 位元灰階影像轉換技術

本指南介紹如何將影像轉換為 16 位元灰階格式,而無需手動將 RGB 分量調整為亮度值。

建立新的 16 位元灰階點陣圖:

最簡單的方法是將 System.Drawing.Bitmap 建構子與 System.Drawing.Imaging.PixelFormat 參數一起使用。 這會直接建立一個具有所需 16 位元灰階格式的新位圖:

<code class="language-csharp">Bitmap grayScaleBP = new System.Drawing.Bitmap(2, 2, System.Drawing.Imaging.PixelFormat.Format16bppGrayScale);</code>
登入後複製

此程式碼片段產生 16 位元灰階的 2x2 像素位圖。 根據需要調整影像的尺寸。

將現有影像轉換為 16 位元灰階:

要轉換現有位圖,您需要迭代每個像素並重新定義其顏色屬性。雖然可能,但此方法對於較大的影像效率較低。

<code class="language-csharp">// (Pixel iteration code would go here – omitted for brevity due to inefficiency)</code>
登入後複製

使用 ColorMatrix 最佳化灰階轉換:

要實現更快、更有效率的灰階轉換,請利用 ColorMatrix。這種方法將變換矩陣應用於影像的色彩數據,從而實現灰階轉換。

<code class="language-csharp">ColorMatrix colorMatrix = new ColorMatrix(
    new float[][] 
    {
        new float[] {.3f, .3f, .3f, 0, 0},
        new float[] {.59f, .59f, .59f, 0, 0},
        new float[] {.11f, .11f, .11f, 0, 0},
        new float[] {0, 0, 0, 1, 0},
        new float[] {0, 0, 0, 0, 1}
    });

using (ImageAttributes attributes = new ImageAttributes()) {
    attributes.SetColorMatrix(colorMatrix);
    // ... (Drawing code using attributes to apply the ColorMatrix) ...
}</code>
登入後複製

這利用標準亮度權重(.3、.59、.11)來實現感知上準確的灰階轉換。 請記住將註解部分替換為適當的程式碼,以使用修改後的 ImageAttributes 繪製圖像。 這種方法比逐像素操作要高效得多,特別是對於較大的影像。

以上是如何將影像轉換為 16 位元灰階?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板