小弟写了一支用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函数是一样的根本没变
请问这个模块到底要怎么用才能达到我的需求呢?