[英]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.