|
本帖最后由 39660519 于 2016-1-19 10:47 编辑
各位老师:
昨天看了“[Excel 程序开发] [第41期]简单验证码识别http://club.excelhome.net/thread-365263-1-1.html”后想对BMP图片了解一下,根据彭版主和各楼的回答并上网学习了一下,自己把1个像素当成一个单元格,并用EXCEL表格改变底色模拟图片,但出错了,想了一个晚上都搞不明白,特来请教老师们,希望老师们能帮忙,在此谢过!!
原BMP图片
用EXCEL模拟后错误的图片
Sub 模拟图片()
Sheets("模拟图片").Cells.Interior.ColorIndex = xlNone
Dim N&, I%, J%, K%, Mm%, M%, Drr(), Flag As Boolean
Dim Arr() As Byte, Pa$, Fn, Dic
Application.ScreenUpdating = False '关闭屏幕更新
Pa = ThisWorkbook.Path & "\" '设置路径
Fnamne = "1.bmp" '设置文件名
Open Pa & Fnamne For Binary As 1 '以二进制打开图像文件
N = LOF(1) '文件的字节数
ReDim Arr(1 To N) As Byte '定义一个一维数组,记录下当前文件的信息
Get 1, , Arr '一次性将文件信息存入数组ARR中
Close 1 '关闭已经打开的图像文件
偏移量 = Arr(11) '开始存储图像数据信息的前1位
位数 = Arr(29) '像素的位数
宽 = Arr(20) * 256 + Arr(19) '相当于列数
高 = Arr(24) * 256 + Arr(23) '相当于行数
像素数量 = 宽 * 高 '1个像素看成1个单元格,相当于共多少个单元格
像素字节 = 位数 / 8 '每个像素占的字节数,相当于1个单元格有多少内容
图像数据信息大小 = 像素数量 * 像素字节 '相当于所有单元格共多少内容
初始位置 = 偏移量 + 1
结束位置 = 偏移量 + 图像数据信息大小
For 行 = 高 To 1 Step -1 '图像数据信息从下到上
A = A + 1 '开始读取第A行
For 列 = 1 To 宽 '图像数据信息从左到右
蓝位 = (A - 1) * 宽 * 像素字节 + (列 - 1) * 像素字节 + 1 + 偏移量
绿位 = (A - 1) * 宽 * 像素字节 + (列 - 1) * 像素字节 + 2 + 偏移量
红位 = (A - 1) * 宽 * 像素字节 + (列 - 1) * 像素字节 + 3 + 偏移量
RGB值 = RGB(Arr(红位), Arr(绿位), Arr(蓝位))
Sheets("模拟图片").Cells(行, 列).Interior.Color = RGB值
Next 列
Next 行
End Sub
|
|