.net图片处理相关

来源:互联网 发布:电脑淘宝网页打不开 编辑:程序博客网 时间:2024/06/06 11:39
 

最近写一个小工具,主要作用是删除图片中的内容。因为用.net开发,整理相关知识备用一下。

说明:文章中部分代码从微软MSDN引用,引用地址:http://msdn.microsoft.com/zh-cn/library/system.drawing.imaging.bitmapdata.scan0(v=VS.80).aspx

1、图像文件的处理方法:

1)使用System.drawing.Image加载图片文件(常用的gif,jpg,png格式都可以),加载后转成Bitmap,再用BitmapData进行操作。

示例代码如下:

' Create a new bitmap.

Dim bmp As New Bitmap("c:\fakePhoto.jpg")

' Lock the bitmap's bits.

Dim rect As New Rectangle(0, 0, bmp.Width, bmp.Height)

Dim bmpData As System.Drawing.Imaging.BitmapData = bmp.LockBits(rect, Drawing.Imaging.ImageLockMode.ReadWrite, bmp.PixelFormat)

' Get the address of the first line.

Dim ptr As IntPtr = bmpData.Scan0

2)再借助System.Runtime.InteropServices.Marshal,直接对加载的图像的内存信息操作,改变颜色值就可以达到修改图像内容的作用。(实现代码参见引用链接)

这样的操作方式主要是改进运行速度,虽然可以用setPix和getPix作类似的操作,但效率很差,如果图片分辨率高,程序会因处理时间太长而无响应。

2、图像内容的处理:

1)目标:首先扫描纸张内容,只保留纸张中打印(黑白打印机)留下的内容,其它干扰内容删除。

2)干扰内容分析:

纸张本身的颜色,因扫描机器的原因,纸张不一定成白色,首先处理的是纸张自己的灰色。测试后颜色值在120左右(上下各差15)范围的颜色,也可以在界面上设置滚动条,让用户根据生成效果自行调整。

非黑色的其它笔迹,打印机打印的是黑色(也包含亮度不足的灰色),这与其它颜色的最大差别在于,黑色值的RGB之间理论上是相等的,实际会有10到50的偏差,借助这个规律,将大于偏差的点删除,即可删除其它笔迹颜色。

笔迹加强,最好的方法是用3*3的卷积加强灰色的字迹,这里简单处理成以前后相信四个像素的均值为基准,将当前计算的像素颜色值像均值靠拢。基本上可以改进字迹的清晰度。

3)待处理问题:

图片像素较多时,处理速度还是比较慢的。即使在操作内存,循环一次所有像素,次数还是很多的。对蓝黑色(钢笔)处理能力有限,只起到模糊作用了。对铅笔类的处理也不好。

原创粉丝点击