vb.net读取picturebox所有像素

uuicczxl 2009-12-09 07:24:14

vb6 可以用 getbits 速度还可以

vb.net 用什么方法读取所有像素速度快呢
...全文
573 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
清晨曦月 元老 2009-12-10
  • 打赏
  • 举报
回复
不过也有点问题,这里边总有个大范围寻址的问题。不知道哪位高人有更好的方法。但相对来讲还是后面的方法更快一些,有兴趣可以查看BitMap.GetPixel方法的源码,呵呵。另外带A通道的处理和这个稍有差异。
清晨曦月 元老 2009-12-10
  • 打赏
  • 举报
回复
Public Class Form1
Dim bmp As Bitmap
Dim WithEvents but As Button
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
but = New Button
Me.Controls.Add(but)
but.Location = Me.ClientSize - but.Size
bmp = Bitmap.FromFile("C:\Documents and Settings\zcsor\My Documents\My Pictures\远古.jpg")
Me.BackgroundImage = bmp
End Sub

Private Sub but_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles but.Click
'下面是用了GetPixel方法,如果图片比较大,那么应该用下面的LockBits方法。
Dim x As Integer = 0, y As Integer = 0
Debug.Print(Hex(bmp.GetPixel(x, y).ToArgb).PadLeft(8, "0") & " --- " & bmp.GetPixel(x, y).ToString)
x = 1
Debug.Print(Hex(bmp.GetPixel(x, y).ToArgb).PadLeft(8, "0") & " --- " & bmp.GetPixel(x, y).ToString)
x = 2
Debug.Print(Hex(bmp.GetPixel(x, y).ToArgb).PadLeft(8, "0") & " --- " & bmp.GetPixel(x, y).ToString)
'下面使用LockBits方法,一次性获取了全部数据,所以图片比较大的时候速度会明显更快一些。
Dim b As Drawing.Imaging.BitmapData = bmp.LockBits(Rectangle.Truncate(bmp.GetBounds(GraphicsUnit.Pixel)), Imaging.ImageLockMode.ReadOnly, bmp.PixelFormat)
Dim ptr As IntPtr = b.Scan0
Dim bytes As Integer = b.Stride * bmp.Height
Dim rgbValues(bytes - 1) As Byte
System.Runtime.InteropServices.Marshal.Copy(ptr, rgbValues, 0, bytes)
bmp.UnlockBits(b)
Debug.Print("b:" & rgbValues(0) & " " & "g:" & rgbValues(1) & " " & "r:" & rgbValues(2))
Debug.Print("b:" & rgbValues(3) & " " & "g:" & rgbValues(4) & " " & "r:" & rgbValues(5))
Debug.Print("b:" & rgbValues(6) & " " & "g:" & rgbValues(7) & " " & "r:" & rgbValues(8))
End Sub

End Class
uuicczxl 2009-12-09
  • 打赏
  • 举报
回复
来人啊
lang_csdn 2009-12-09
  • 打赏
  • 举报
回复
Partial Public Class NativeMethods

'''Return Type: COLORREF->DWORD->unsigned int
'''hdc: HDC->HDC__*
'''x: int
'''y: int
<System.Runtime.InteropServices.DllImportAttribute("gdi32.dll", EntryPoint:="GetPixel")> _
Public Shared Function GetPixel(<System.Runtime.InteropServices.InAttribute()> ByVal hdc As Integer, ByVal x As Integer, ByVal y As Integer) As UInteger
End Function


<System.Runtime.InteropServices.DllImportAttribute("user32.dll", EntryPoint:="GetDC")> _
Public Shared Function GetDC(<System.Runtime.InteropServices.InAttribute()> ByVal hWnd As System.IntPtr) As System.IntPtr
End Function
End Class




Dim b As New System.Drawing.Bitmap("c:\1.jpg")
Dim g As System.Drawing.Graphics = System.Drawing.Graphics.FromImage(b)
Dim hdc As IntPtr = g.GetHdc


For x As Integer = 0 To 10
For y As Integer = 0 To 20
Debug.WriteLine(".NET" & b.GetPixel(x, y).ToArgb & " API: " & NativeMethods.GetPixel(hdc.ToInt32, x, y))
Next
Next


不过,我发现api的值,不能读取,可能是hdc的问题!准备吃饭了,希望高手帮我改一下!
uuicczxl 2009-12-09
  • 打赏
  • 举报
回复
没这么难吧。。。
laviewpbt 2009-12-09
  • 打赏
  • 举报
回复
http://blog.csdn.net/laviewpbt/category/255592.aspx?PageNumber=2

vb.net中彩色图像数据的快速获取
uuicczxl 2009-12-09
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 lang_csdn 的回复:]
引用 5 楼 uuicczxl 的回复:
.net 能用getpixel 还说什么了


.net 也可以使用getpixel  api的



[/Quote]


怎么用啊
laviewpbt 2009-12-09
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 wuyq11 的回复:]
Bitmap.GetPixel
[/Quote]

钻石给出这样的答案让我对CSDN的这种等级制度表示强烈的怀疑。

VB.NET中可以用LockBits
lang_csdn 2009-12-09
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 uuicczxl 的回复:]
.net 能用getpixel 还说什么了
[/Quote]

.net 也可以使用getpixel api的


uuicczxl 2009-12-09
  • 打赏
  • 举报
回复
.net 能用getpixel 还说什么了
lang_csdn 2009-12-09
  • 打赏
  • 举报
回复
对这方面没有什么研究,是不是根据x,y轴,循环使用GetPixel读取吧!


yifan__ 2009-12-09
  • 打赏
  • 举报
回复
顶一个,我也想知道额
uuicczxl 2009-12-09
  • 打赏
  • 举报
回复
详细点好吗 给分
wuyq11 2009-12-09
  • 打赏
  • 举报
回复
Bitmap.GetPixel
内容概要:本文提出了一种促进可再生能源发电消纳的用户侧典型资源需求响应策略,并通过Matlab代码实现进行仿真验证。该策略聚焦于通过优化用户侧用电行为来提升电网对可再生能源波动性的适应能力,重点研究了需求响应机制下典型负荷资源的建模与调度方法。通过对用户侧可调节负荷(如温控负荷、电动汽车等)的特性分析,建立标准化的需求响应模型,结合电价激励或直接控制手段,引导用户在可再生能源出力高峰时段增加用电,在低谷时段减少用电,从而实现削峰填谷、提升新能源消纳水平的目标。研究还深入探讨了与共享储能系统的协同优化机制,进一步增强系统的灵活性和调节能力,为高比例可再生能源接入背景下的源网荷储协调运行提供技术支撑。; 适合人群:具备一定电力系统基础知识,从事新能源、需求响应、综合能源系统、电力市场等相关领域研究的科研人员及研究生。; 使用场景及目标:① 学习和复现用户侧需求响应在促进新能源消纳中的应用;② 掌握典型可调节负荷的精细化建模方法及其在Matlab中的程序实现;③ 为研究源网荷储协同优化、电力市场机制设计、综合能源系统调度等前沿课题提供可扩展的技术参考和代码基础。; 阅读建议:此资源包含完整的Matlab代码实现,建议读者在学习理论模型的同时,务必动手运行和调试代码,结合仿真结果深入理解需求响应策略的作用机理、优化过程及与共享储能协同的增益效果。

16,718

社区成员

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

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