簡體   English   中英

如何在C#上使用圖像的字節數組

[英]How to use the byte array of image on C#

所以,我需要使用我的圖像的字節數組來修改,例如......我有一個 380x380 的圖像,我需要取 3x3 的圖像並與其他數組相乘,從而與整個圖像相乘。

我從不使用字節數組,所以我不知道我是否做得對

//Obtener byteArray de imagen
Image imageOri = Image.FromFile(Path);
var ms = new MemoryStream();
imageOri.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
var byteImage = ms.ToArray();

所以,當我運行這段代碼時,byteImage 有一個...列表? 數據,所以,我不知道如何獲取圖像的 3x3 來制作過程

我假設您想應用卷積過濾器。

首先,您可能想使用 Bitmap 而不是圖像,即new Bitmap(Path)

最簡單的方法是遍歷每個像素,然后遍歷過濾器中的每個值,並與相應的像素值相乘/累加。 使用GetPixel獲取像素值。 請注意,您需要以某種方式處理圖像的邊框,例如跳過它們。 GetPixel是出了名的慢,但我建議使用它來確保在優化之前確定代碼。

像這樣的東西(未經測試):

        var bmp = new Bitmap(@"test.bmp");
        var filter = new float[3, 3];
        var result = new Bitmap(bmp.Width - 2, bmp.Height - 2);
        for(int y = 1; y < bmp.Height-1; y++)
        {
            for (int x = 1; x < bmp.Width - 1; x++)
            {
                float r = 0;
                r += bmp.GetPixel(x-1, y-1).R * filter[0, 0];
                r += bmp.GetPixel(x  , y-1).R * filter[1, 0];
                r += bmp.GetPixel(x+1, y-1).R * filter[2, 0];
                r += bmp.GetPixel(x-1, y  ).R * filter[0, 1];
                r += bmp.GetPixel(x  , y  ).R * filter[1, 1];
                r += bmp.GetPixel(x+1, y  ).R * filter[2, 1];
                r += bmp.GetPixel(x-1, y+1).R * filter[0, 2];
                r += bmp.GetPixel(x  , y+1).R * filter[1, 2];
                r += bmp.GetPixel(x+1, y+1).R * filter[2, 2];

                // Repeat for G & B channels
                result.SetPixel(x-1, y-1, Color.FromArgb((int)r, 0, 0));
            }
        }

可以在此處找到更全面的指南

暫無
暫無

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

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