代码语言
.
CSharp
.
JS
Java
Asp.Net
C
MSSQL
PHP
Css
PLSQL
Python
Shell
EBS
ASP
Perl
ObjC
VB.Net
VBS
MYSQL
GO
Delphi
AS
DB2
Domino
Rails
ActionScript
Scala
代码分类
文件
系统
字符串
数据库
网络相关
图形/GUI
多媒体
算法
游戏
Jquery
Extjs
Android
HTML5
菜单
网页交互
WinForm
控件
企业应用
安全与加密
脚本/批处理
开放平台
其它
【
CSharp
】
给图片打马赛克
作者:
嘉悦
/ 发布于
2015/1/8
/
936
原理:就是将图片内容分割成一些小方块,方块内的像素完成相同,从而忽略图像的一些细节
方法:以下提供了两种方法,第一种方法不管方块大小整体效率相差不大,而第二种当方块越大速度越快,方块越小速度越慢
//使用指针往指定区域打马赛克 public Image MaSaiKe(Image sImage, int val, Rectangle rectangle) { Bitmap rBitmap = new Bitmap(sImage); if (rBitmap.Equals(null)) { return null; } int stdR=0, stdG=0, stdB=0; BitmapData srcData = rBitmap.LockBits(rectangle, ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb); unsafe { byte* point = (byte*)srcData.Scan0.ToPointer(); for (int i = 0; i < srcData.Height; i++) { for (int j = 0; j < srcData.Width; j++) { if (i % val == 0) { if (j % val == 0) { stdR = point[2]; stdG = point[1]; stdB = point[0]; } else { point[0] = (byte)stdB; point[1] = (byte)stdG; point[2] = (byte)stdR; } } else { byte* pTemp = point - srcData.Stride; point[0] = (byte)pTemp[0]; point[1] = (byte)pTemp[1]; point[2] = (byte)pTemp[2]; } point += 3; } point += srcData.Stride - srcData.Width * 3; } rBitmap.UnlockBits(srcData); } return rBitmap; } //使用指针给图片打马赛克 public Image MaSaiKe(Image sImage, int val) { return MaSaiKe(sImage, val, new Rectangle(0, 0, sImage.Width, sImage.Height)); } //使用Graphics往指定区域打马赛克 public Image MaSaiKeGraphics(Image sImage, int val, Rectangle rectangle) { Bitmap rBitmap = new Bitmap(sImage); if (rBitmap.Equals(null)) { return null; } using (Graphics g = Graphics.FromImage(rBitmap)) { int startX = rectangle.Left, startY = rectangle.Top; int fWindth = 0, fHeight = 0; long outvalue = 0; long rows = Math.DivRem(rectangle.Height, val, out outvalue); if (outvalue == 0) rows--; long columns = Math.DivRem(rectangle.Width, val, out outvalue); if (outvalue == 0) columns--; for (int y = 0; y <= rows; y++) { startY = rectangle.Top + y * val; if (startY + val > rectangle.Bottom) fHeight = rectangle.Bottom - startY; else fHeight = val; for (int x = 0; x <= columns; x++) { startX = rectangle.Left + x * val; if (startX + val > rectangle.Right) fWindth = rectangle.Right - startX; else fWindth = val; Rectangle fillRectangle = new Rectangle(startX, startY, fWindth, fHeight); Color fillColor = rBitmap.GetPixel(startX, startY); g.FillRectangle(new SolidBrush(fillColor), fillRectangle); } } } return rBitmap; } //使用Graphics给图片打马赛克 public Image MaSaiKeGraphics(Image sImage, int val) { return MaSaiKeGraphics(sImage, val, new Rectangle(0, 0, sImage.Width, sImage.Height)); }
试试其它关键字
马赛克
图片
同语言下
.
文件IO 操作类库
.
Check图片类型[JPEG(.jpg 、.jpeg),TIF,GIF,BMP,PNG,P
.
机器名和IP取得(IPV4 IPV6)
.
Tiff转换Bitmap
.
linqHelper
.
MadieHelper.cs
.
RegHelper.cs
.
如果关闭一个窗体后激活另一个窗体的事件或方法
.
创建日志通用类
.
串口辅助开发类
可能有用的
.
C#实现的html内容截取
.
List 切割成几份 工具类
.
SQL查询 多列合并成一行用逗号隔开
.
一行一行读取txt的内容
.
C#动态修改文件夹名称(FSO实现,不移动文件)
.
c# 移动文件或文件夹
.
c#图片添加水印
.
Java PDF转换成图片并输出给前台展示
.
网站后台修改图片尺寸代码
.
处理大图片在缩略图时的展示
嘉悦
贡献的其它代码
(
3
)
.
给图片打马赛克
.
判断客户端是iOS还是Android等移动终端
.
判断longint范围内的数是否为素数
Copyright © 2004 - 2024 dezai.cn. All Rights Reserved
站长博客
粤ICP备13059550号-3