快速读取图片文件每一像素点颜色到二维数组!不要GetPixel!

a2010115 2014-12-28 10:00:12
目前代码:
   
Do Until y = jpgimage.Height '把图片读取到ptoall二维数组里
Do Until x = jpgimage.Width
ptoall(x, y) = jpgimage.GetPixel(x, y)
x = x + 1
Loop
x = 0
y = y + 1
Loop

jpgimage是bitmap类型,这样getpixel太慢了。。有谁有更加快速的算法读取每一像素点rgb颜色到二维数组。。
...全文
881 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
dylike 2015-07-13
  • 打赏
  • 举报
回复
using B As New DSAPI.图形图像.图像识别(Me.BackgroundImage) For I as integer=0 to me.backgroundimage.width-1 for J as integer=0 to me.backgroundimage.height-1 ptoall(i,j)=B.获取指定坐标颜色(i,j) next next end using
dylike 2015-07-13
  • 打赏
  • 举报
回复
using  B As New DSAPI.图形图像.图像识别(Me.BackgroundImage)
For I as integer=0 to me.backgroundimage.width-1
for J as integer=0 to me.backgroundimage.height-1
ptoall(i,j)=获取指定坐标颜色(i,j)
next
next
end using


DSAPI1.0.0.7
software_artisan 2015-07-12
  • 打赏
  • 举报
回复
BMP文件难道不是像素点色值的二维数组么?
a2010115 2015-07-11
  • 打赏
  • 举报
回复
引用 11 楼 zanfeng 的回复:
关键是你要干啥的? lockbits是把图象读取到内存。这里已经是你所要的二维数组了。 但如果图象比较大,这时候读取到内存也需要时间。bitmap如果不压缩你直接读文件就可以了。那样最快。 如果是压缩过的RLE行程编码的压缩也比较好解也挺快。
现在关键是做个高斯图像模糊算法
足球中国 2015-01-11
  • 打赏
  • 举报
回复
关键是你要干啥的? lockbits是把图象读取到内存。这里已经是你所要的二维数组了。 但如果图象比较大,这时候读取到内存也需要时间。bitmap如果不压缩你直接读文件就可以了。那样最快。 如果是压缩过的RLE行程编码的压缩也比较好解也挺快。
a2010115 2015-01-10
  • 打赏
  • 举报
回复
a2010115 2015-01-05
  • 打赏
  • 举报
回复
还有什么方法么?现在需要越快越好,算法很快主要是读取图片慢
a2010115 2015-01-02
  • 打赏
  • 举报
回复
thanks大家的回贴!
zixingcheng_ 2014-12-29
  • 打赏
  • 举报
回复
代码C#的自己参考吧
zixingcheng_ 2014-12-29
  • 打赏
  • 举报
回复
/// <summary>提取图片Rgb的Byte组(32位) /// </summary> /// <param name="curBitmap"></param> public byte[] GetData(Bitmap curBitmap) { BitmapData objData = null; byte[] bytRGB = null; int nWidth = curBitmap.Width; int nHeight = curBitmap.Height; int nLength = 0; try { //不能为空 if (curBitmap == null) { return bytRGB; } //实例Rgb组大小 nLength = nHeight * 4 * nWidth; bytRGB = new byte[nLength]; //提取数据 objData = curBitmap.LockBits(new Rectangle(0, 0, nWidth, nHeight), ImageLockMode.ReadWrite, PixelFormat.Format32bppPArgb); System.IntPtr Scan0 = objData.Scan0; System.Runtime.InteropServices.Marshal.Copy(Scan0, bytRGB, 0, nLength); curBitmap.UnlockBits(objData); //返回 return bytRGB; } catch { throw; } }
WM_JAWIN 2014-12-29
  • 打赏
  • 举报
回复
如楼上所说,lockbits, http://msdn.microsoft.com/zh-cn/library/5ey6h79d.aspx 再配合unsafe,估计更快
ajaxfeifei 2014-12-29
  • 打赏
  • 举报
回复
使用多线程分段读取,每个线程处理几行。控制好,计算好就成了。
laviewpbt 2014-12-29
  • 打赏
  • 举报
回复
lockbits
zj_zwl 2014-12-29
  • 打赏
  • 举报
回复
感觉lockbits已经很快了
a2010115 2014-12-28
  • 打赏
  • 举报
回复
怎么破!!!

16,553

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧