none
VB.net 影像撷取像素RGB速度的问题 RRS feed

  • 问题

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

     

    2012年12月30日 21:16

答案