首頁 > 後端開發 > C++ > 如何使用位元組數組加速 C# 中的點陣圖操作?

如何使用位元組數組加速 C# 中的點陣圖操作?

Susan Sarandon
發布: 2025-01-21 13:31:09
原創
846 人瀏覽過

How Can I Speed Up Bitmap Manipulation in C# Using Byte Arrays?

提高 C# 中的點陣圖處理速度

使用 GetPixel()SetPixel() 在 C# 位圖中直接進行像素操作可能會很慢。 為了顯著加快處理速度,將點陣圖轉換為位元組數組可透過提供對像素資料的直接存取來提供效能優勢。

點陣圖到位元組數組的轉換

此方法有效地將 Bitmap 轉換為表示每個像素的 RGBA 資料的位元組陣列:

<code class="language-csharp">public static byte[] BitmapToByteArray(Bitmap bitmap)
{
    BitmapData bData = bitmap.LockBits(new Rectangle(0, 0, bitmap.Width, bitmap.Height), ImageLockMode.ReadWrite, bitmap.PixelFormat);
    int length = bData.Stride * bData.Height;
    byte[] data = new byte[length];
    System.Runtime.InteropServices.Marshal.Copy(bData.Scan0, data, 0, length);
    bitmap.UnlockBits(bData);
    return data;
}</code>
登入後複製

位元組數組到位圖重建

此函數從位元組數組重建位圖:

<code class="language-csharp">public static Bitmap ByteArrayToBitmap(byte[] data, int width, int height)
{
    Bitmap bitmap = new Bitmap(width, height);
    BitmapData bData = bitmap.LockBits(new Rectangle(0, 0, bitmap.Width, bitmap.Height), ImageLockMode.ReadWrite, bitmap.PixelFormat);
    System.Runtime.InteropServices.Marshal.Copy(data, 0, bData.Scan0, data.Length);
    bitmap.UnlockBits(bData);
    return bitmap;
}</code>
登入後複製

理解LockBitsMarshal.Copy

LockBits() 將點陣圖的像素資料保護在記憶體中以便直接存取。 Marshal.Copy() 促進託管(C#)和非託管(點陣圖記憶體)記憶體空間之間的高效資料傳輸。

編組與不安全代碼

雖然不安全的程式碼可能提供更快的執行速度,但它需要細緻的處理。 編組提供了更安全的替代方案,儘管潛在的性能損失很小。最佳選擇取決於您專案的特定需求和風險承受能力。

以上是如何使用位元組數組加速 C# 中的點陣圖操作?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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