第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

我想用BitmapData 的方式處理圖片 產(chǎn)生‘柔化’效果,下面是我寫的一個(gè)函數(shù):

我想用BitmapData 的方式處理圖片 產(chǎn)生‘柔化’效果,下面是我寫的一個(gè)函數(shù):

C#
慕村9548890 2023-03-03 18:14:31
private void Image_Soften(){try{int Height = this.pictureBox1.Image.Height;int Width = this.pictureBox1.Image.Width;Bitmap bitmap = new Bitmap(Width, Height, PixelFormat.Format32bppRgb);Bitmap MyBitmap = (Bitmap)this.pictureBox1.Image;BitmapData oldData = MyBitmap.LockBits(new Rectangle(0, 0, Width, Height), ImageLockMode.ReadOnly, PixelFormat.Format32bppRgb);BitmapData newData = bitmap.LockBits(new Rectangle(0, 0, Width, Height), ImageLockMode.ReadWrite, PixelFormat.Format32bppRgb);unsafe{byte* plos = (byte*)(oldData.Scan0.ToPointer());byte* pbg = (byte*)(newData.Scan0.ToPointer());//高斯模板int[] Gauss ={ 1, 2, 1, 2, 4, 2, 1, 2, 1 };for (int i = 1; i < Width - 1;i ++ ){for (int j = 1; j < Height; j++){int r = 0, g = 0, b = 0;int Index = 0;for (int col = -1; col <= 1; col++)for (int row = -1; row <= 1; row++){  r += plos[0] * Gauss[Index];g += plos[1] * Gauss[Index];b += plos[2] * Gauss[Index];Index++;}r /= 16;g /= 16;b /= 16;//處理顏色值溢出r = r > 255 ? 255 : r;r = r < 0 ? 0 : r;g = g > 255 ? 255 : g;g = g < 0 ? 0 : g;b = b > 255 ? 255 : b;b = b < 0 ? 0 : b;pbg[0] = (byte) r;pbg[1] = (byte)g;pbg[2] = (byte)b;plos += 4;pbg += 4;}}bitmap.UnlockBits(newData);MyBitmap.UnlockBits(oldData);this.pictureBox1.Image = bitmap;}}catch (Exception ex){MessageBox.Show(ex.Message, "信息提示");}}不知道出了什么錯(cuò),經(jīng)過(guò)這個(gè)函數(shù)處理后,不報(bào)錯(cuò)。但是效果沒(méi)出來(lái)。
查看完整描述

1 回答

?
繁星淼淼

TA貢獻(xiàn)1775條經(jīng)驗(yàn) 獲得超11個(gè)贊

問(wèn)題在這里:
for (int col = -1; col <= 1; col++)
for (int row = -1; row <= 1; row++)
{
r += plos[0] * Gauss[Index];
g += plos[1] * Gauss[Index];
b += plos[2] * Gauss[Index];
Index++;
}

如果我理解得不錯(cuò)的話,高斯算法是要去取周圍的點(diǎn)的值,計(jì)算出當(dāng)前點(diǎn)的值的。
但是你這個(gè)地方9次讀取原像素顏色時(shí),都是讀的本點(diǎn)的。加權(quán)累計(jì)之后的平均數(shù),當(dāng)然還是等于本點(diǎn)的值。 
-----------------------
調(diào)好的程序在下面。
中間對(duì)于指針的變化方面有bug.我改為計(jì)算偏移的方式了。

還有,這個(gè)程序處理完之后,會(huì)自動(dòng)為圖片加一個(gè)黑邊。原因是沒(méi)有處理最外的像素。如果要處理最邊上的像素,就要在值舊值時(shí)考慮是不是已經(jīng)越出邊界。

-----------------------
private void Image_Soften()
{
try
{
int Height = this.pictureBox1.Image.Height;
int Width = this.pictureBox1.Image.Width;
Bitmap bitmap = new Bitmap(Width, Height, PixelFormat.Format32bppRgb);
Bitmap MyBitmap = (Bitmap)this.pictureBox1.Image;

BitmapData oldData = MyBitmap.LockBits(new Rectangle(0, 0, Width, Height), ImageLockMode.ReadOnly, PixelFormat.Format32bppRgb);
BitmapData newData = bitmap.LockBits(new Rectangle(0, 0, Width, Height), ImageLockMode.ReadWrite, PixelFormat.Format32bppRgb);
unsafe
{
byte* plos = (byte*)(oldData.Scan0.ToPointer());
byte* pbg = (byte*)(newData.Scan0.ToPointer());
//高斯模板
int[] Gauss = { 1, 2, 1, 2, 4, 2, 1, 2, 1 };
for (int i = 1; i < Width - 1; i++)
{
for (int j = 1; j < Height - 1; j++)
{
int r = 0, g = 0, b = 0;
int Index = 0;

for (int col = -1; col <= 1; col++)
{
for (int row = -1; row <= 1; row++)
{
int off = ((j + row) *(Width) + (i + col)) * 4;
r += plos[off + 0] * Gauss[Index];
g += plos[off + 1] * Gauss[Index];
b += plos[off + 2] * Gauss[Index];
Index++;
}
}
r /= 16;
g /= 16;
b /= 16;
//處理顏色值溢出
r = r > 255 ? 255 : r;
r = r < 0 ? 0 : r;
g = g > 255 ? 255 : g;
g = g < 0 ? 0 : g;
b = b > 255 ? 255 : b;
b = b < 0 ? 0 : b;
int off2 = (j * Width + i) * 4;
pbg[off2 + 0] = (byte)r;
pbg[off2 + 1] = (byte)g;
pbg[off2 + 2] = (byte)b;
}
}
bitmap.UnlockBits(newData);
MyBitmap.UnlockBits(oldData);
this.pictureBox1.Image = bitmap;
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "信息提示");
}
}


查看完整回答
反對(duì) 回復(fù) 2023-03-06
  • 1 回答
  • 0 關(guān)注
  • 124 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)