C#实现图像锐化的方法
本文实例讲述了C#实现图像锐化的方法。分享给大家供大家参考。具体如下:
//定义图像锐化函数 privatestaticBitmapSharpen(Bitmapa,doublev) { intw=a.Width; inth=a.Height; try { BitmapdstBitmap=newBitmap(w,h,System.Drawing.Imaging.PixelFormat.Format24bppRgb); System.Drawing.Imaging.BitmapDatasrcData=a.LockBits(newRectangle (0,0,w,h),System.Drawing.Imaging.ImageLockMode.ReadOnly,System.Drawing.Imaging.PixelFormat.Format24bppRgb); System.Drawing.Imaging.BitmapDatadstData=dstBitmap.LockBits(newRectangle (0,0,w,h),System.Drawing.Imaging.ImageLockMode.WriteOnly,System.Drawing.Imaging.PixelFormat.Format24bppRgb); unsafe { byte*pIn=(byte*)srcData.Scan0.ToPointer(); byte*pOut=(byte*)dstData.Scan0.ToPointer(); byte*p; intstride=srcData.Stride; for(inty=0;y<h;y++) { for(intx=0;x<w;x++) { //边缘八个点像素不变 if(x==0||x==w-1||y==0||y==h-1) { pOut[0]=pIn[0]; pOut[1]=pIn[1]; pOut[2]=pIn[2]; } else { intr0,r1,r2,r3,r4,r5,r6,r7,r8; intg1,g2,g3,g4,g5,g6,g7,g8,g0; intb1,b2,b3,b4,b5,b6,b7,b8,b0; doublevR,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+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)r0-(double)(r1+r2+r3+r4+r5+r6+r7+r8)/8; vG=(double)g0-(double)(g1+g2+g3+g4+g5+g6+g7+g8)/8; vB=(double)b0-(double)(b1+b2+b3+b4+b5+b6+b7+b8)/8; vR=r0+vR*v; vG=g0+vG*v; vB=b0+vB*v; 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); } pOut[0]=(byte)vB; pOut[1]=(byte)vG; pOut[2]=(byte)vR; } pIn+=3; pOut+=3; } pIn+=srcData.Stride-w*3; pOut+=srcData.Stride-w*3; } } a.UnlockBits(srcData); dstBitmap.UnlockBits(dstData); returndstBitmap; } catch { returnnull; } }
希望本文所述对大家的C#程序设计有所帮助。