VB.net 影像撷取像素RGB速度的问题
小弟写了一支用picture控键去撷取像素RGB的程序
并将RGB三原色的数值存入数据库
不过速度很慢 我是使用GetPixel函数
以下是我的代码:
Dim 取几张图了 = (From 图像数据表 In 颜色数据表.图像数据表 Order By 图像数据表.图像张数 Descending Select 图像数据表).FirstOrDefault
Dim 要插入的图数
If 取几张图了 Is Nothing Then
要插入的图数 = 1
Else
要插入的图数 = 取几张图了.图像张数 + 1
End If
'-----------------------------
Dim 图像数据表1 As New 图像数据表
Dim bmpImg As New Bitmap(pic.Image)
For x坐标 = 0 To pic.Width - 1
For y坐标 = 0 To pic.Height - 1
鼠标.坐标点的RGB = bmpImg.GetPixel(x坐标, y坐标)
图像数据表1.图像张数 = 要插入的图数
图像数据表1.X坐标 = x坐标
图像数据表1.Y坐标 = y坐标
图像数据表1.R = 鼠标.坐标点的RGB.R
图像数据表1.G = 鼠标.坐标点的RGB.G
图像数据表1.B = 鼠标.坐标点的RGB.B
颜色数据表.图像数据表.AddObject(图像数据表1)
颜色数据表.SaveChanges(System.Data.Objects.SaveOptions.None)
Next
Next
所以我在goole上搜索有无比GetPixel函数去撷取像素RGB
更快的方法 我找到了以下这个
快速绘图模块:
http://ycc.tsu.edu.tw/ImgProc/FastPixelModule.htm
它的模块在处理速度上可以快上十倍 可是我拿来用速度根本没变快
我将这个模块 这个部分改成:
'在内存锁定状态下取得颜色点(Pixel)
Function GetP(ByVal i As Integer, ByVal j As Integer) As Color
Dim k As Integer = j * L + i * Bpx '索引位置计算
Dim C As Color = Color.FromArgb(rgb(k + 3), rgb(k + 2), rgb(k + 1), rgb(k))
Return C
End Function
然后使用它的模块去更改我的代码:
Dim 取几张图了 = (From 图像数据表 In 颜色数据表.图像数据表 Order By 图像数据表.图像张数 Descending Select 图像数据表).FirstOrDefault
Dim 要插入的图数
If 取几张图了 Is Nothing Then
要插入的图数 = 1
Else
要插入的图数 = 取几张图了.图像张数 + 1
End If
'-----------------------------
Dim bmpImg As New Bitmap(pic.Image)
Dim 图像数据表1 As New 图像数据表
'Dim bmpImg As New Bitmap(区块x坐标, 区块y坐标)
'Dim R(pic.Width - 1, pic.Height - 1) As Byte, G(pic.Width - 1, pic.Height - 1) As Byte, B(pic.Width - 1, pic.Height - 1) As Byte
FastPixel.LockBMP(bmpImg)
For x坐标 = 0 To pic.Width - 1
For y坐标 = 0 To pic.Height - 1
图像数据表1.图像张数 = 要插入的图数
图像数据表1.X坐标 = x坐标
图像数据表1.Y坐标 = y坐标
图像数据表1.R = FastPixel.GetP(x坐标, y坐标).R
图像数据表1.G = FastPixel.GetP(x坐标, y坐标).G
图像数据表1.B = FastPixel.GetP(x坐标, y坐标).B
' 图像数据表1.R = BitConverter.ToInt32(R(x坐标, y坐标), 0)
颜色数据表.图像数据表.AddObject(图像数据表1)
颜色数据表.SaveChanges(System.Data.Objects.SaveOptions.None)
Next
Next
FastPixel.UnLockBMP(bmpImg)
不过这个方法基本上速度跟GetPixl函数是一样的根本没变 请问这个模块到底要怎么用才能达到我的需求呢?
[解决办法]
直接将bitmap存入内存,然后以访问数组的方式去读取。不过要注意不同调色板,格式不同。最好找找有没有这样的库。