private void button2_Click(object sender, EventArgs e)
{
Bitmap src = new Bitmap(pictureBox1.Image);
int w = pictureBox1.Image.Width;
int h = pictureBox1.Image.Height;
try
{
Bitmap bitmap1 = new Bitmap(w, h, System.Drawing.Imaging.PixelFormat.Format24bppRgb);
System.Drawing.Imaging.BitmapData myData1 = src.LockBits(new Rectangle(0, 0, w, h), System.Drawing.Imaging.ImageLockMode.ReadOnly, System.Drawing.Imaging.PixelFormat.Format24bppRgb);
System.Drawing.Imaging.BitmapData myData2 = bitmap1.LockBits(new Rectangle(0, 0, w, h), System.Drawing.Imaging.ImageLockMode.WriteOnly, System.Drawing.Imaging.PixelFormat.Format24bppRgb);
unsafe
{
byte* pIn = (byte*) myData1.Scan0.ToPointer();
byte* pOut = (byte*)myData2.Scan0.ToPointer();
byte* p;
int Stride =myData1.Stride;
for(int y = 0;y < h ; y ++)
{
for(int x = 0;x < w; x++)
{
//边缘8个点像素不变
if(x==0|| x==w-1||y==0||y==h-1)
{
pOut[0]=pIn[0];
pOut[1]=pIn[1];
pOut[2]=pIn[2];
}
else
{
int r0,r1,r2,r3,r4,r5,r6,r7,r8;
int g0,g1,g2,g3,g4,g5,g6,g7,g8;
int b0,b1,b2,b3,b4,b5,b6,b7,b8;
double vR,vG,vB;
//左上
p=pIn-Stride-3;
r1=p[2];
g1=p[1];
b1=p[0];
//正上
p=pIn-Stride;
r2=p[2];
g2=p[1];
b2=p[0];
//右上
p=pIn-Stride + 3;
r3=p[2];
g3=p[1];
b3=p[0];
//左
p=pIn-3;
r4=p[2];
g4=p[1];
b4=p[0];
//右
p=pIn+Stride-3;
r5=p[2];
g5=p[1];
b5=p[0];
//左下
p=pIn+Stride-3;
r6=p[2];
g6=p[1];
b6=p[0];
//正下
p=pIn+Stride;
r7=p[2];
g7=p[1];
b7=p[0];
//右下
p=pIn+Stride+3;
r8=p[2];
g8=p[1];
b8=p[0];
//中心点
p=pIn;
r0=p[2];
g0=p[1];
b0=p[0];
//使用模板
vR = (double) ((r1+r3+r6+r8+2*r2+2*r4+2*r7+2*r5+4*r0)/16);
vG = (double) ((g1+g3+g6+g8+2*g2+2*g4+2*g7+2*g5+4*r0)/16);
vB = (double) ((b1+b3+b6+b8+2*b2+2*b4+2*b7+2*b5+4*r0)/16);
if(vR>0)
{
vR = Math.Min(255,vR);
}
else
{
vR = Math.Max(0,vR);
}
if(vG>0)
{
vG=Math.Min(255,vG);
}
else
{
vG=Math.Max(0,vG);
}
if(vB>0)
{
vB=Math.Min(255,vB);
}
else
{
vB=Math.Max(0,vB);
}
double temp =(vR*19595+vG*38469+vB*7472)/65536;
pOut[0]=(byte)temp;
pOut[1]=(byte)temp;
pOut[2]=(byte)temp;
}
pIn+=3;
pOut+=3;
}
pIn+=myData1.Stride-w*3;
pOut+=myData1.Stride-w*3;
}
}
src.UnlockBits(myData1);
bitmap1.UnlockBits(myData2);
pictureBox2.Image=bitmap1;
}
catch
{
pictureBox2.Image=null;
}
}
# ## # ```![图片说明](https://img-ask.csdn.net/upload/201604/04/1459776948_516228.png)c#