欢迎来到天天文库
浏览记录
ID:41306427
大小:436.50 KB
页数:9页
时间:2019-08-21
《C 图形处理系列(一)——逆反处理》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、C#图形处理系列(一)——最简单第一步:逆反处理、二值处理在本系列博文中,将介绍几种常见的图形处理算法。上文C#图片处理常见方法性能比较中以彩色转灰色处理为例探讨了3中方法的性能,因此彩色转灰度处理就不再另做介绍。publicenumDealType{黑白处理,逆反处理,平滑处理,霓虹处理,浮雕处理,雾化处理,锐化处理,二值处理,马赛克处理,油画处理}DealType枚举定义了常见的图形处理方法。//////具有图片处理功能的接口///publicinterfaceIIma
2、geProcessable{voidProcessBitmap(Bitmapbmp);unsafevoidUnsafeProcessBitmap(Bitmapbmp);}IImageProcessable接口提供图形处理接口,所有图形处理类都实现了该接口。ProcessBitmap(Bitmapbmp)直接提取像素法处理图形,处理效率较低,适合处理小图片。UnsafeProcessBitmap(Bitmapbmp)提供高效率的图形处理方法,以指针或内存拷贝法处理图形,不安全代码。publicclassImage
3、DealFactory{publicstaticIImageProcessableCreateDealImage(DealTypedealType){IImageProcessabledealImage=null;switch(dealType){caseDealType.黑白处理:dealImage=newBlackWhiteImage();break;caseDealType.霓虹处理:dealImage=newNeonImage();break;caseDealType.逆反处理:dealImage=ne
4、wRebelliousImage();break;caseDealType.平滑处理:dealImage=newSmoothImage();break;caseDealType.浮雕处理:dealImage=newReliefImage();break;caseDealType.雾化处理:dealImage=newFogImage();break;caseDealType.锐化处理:dealImage=newSharpenImage();break;caseDealType.二值处理:dealImage=new
5、TwoValueImage();break;caseDealType.马赛克处理:dealImage=newMosaicImage();break;caseDealType.油画处理:dealImage=newOilImage();break;}returndealImage;}}ImageDealFactory图形处理工厂。先从最简单的图形处理介绍起,最简单的要算逆反处理、灰度处理、积木二值处理了。逆反处理逆反处理的原理很简单,用255减去该像素的RGB作为新的RGB值即可。g(i,j)=255-f(i,j)
6、//////逆反处理///publicclassRebelliousImage:IImageProcessable{publicvoidProcessBitmap(System.Drawing.Bitmapbmp){intwidth=bmp.Width;intheight=bmp.Height;for(inti=0;i7、=255-c.G;intb=255-c.B;bmp.SetPixel(i,j,Color.FromArgb(r,g,b));}}}#regionIImageProcessable成员publicunsafevoidUnsafeProcessBitmap(Bitmapbmp){intwidth=bmp.Width;intheight=bmp.Height;Rectanglerect=newRectangle(0,0,width,height);BitmapDatabmpData=bmp.LockBits(rect8、,ImageLockMode.ReadWrite,PixelFormat.Format32bppArgb);byte*ptr=(byte*)(bmpData.Scan0);for(inti=0;i
7、=255-c.G;intb=255-c.B;bmp.SetPixel(i,j,Color.FromArgb(r,g,b));}}}#regionIImageProcessable成员publicunsafevoidUnsafeProcessBitmap(Bitmapbmp){intwidth=bmp.Width;intheight=bmp.Height;Rectanglerect=newRectangle(0,0,width,height);BitmapDatabmpData=bmp.LockBits(rect
8、,ImageLockMode.ReadWrite,PixelFormat.Format32bppArgb);byte*ptr=(byte*)(bmpData.Scan0);for(inti=0;i
此文档下载收益归作者所有