.net圖片處理相關

 

最近寫一個小工具,主要作用是刪除圖片中的內容。因爲用.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)待處理問題:

圖片像素較多時,處理速度還是比較慢的。即使在操作內存,循環一次所有像素,次數還是很多的。對藍黑色(鋼筆)處理能力有限,只起到模糊作用了。對鉛筆類的處理也不好。

發佈了43 篇原創文章 · 獲贊 6 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章