本篇内容主要讲解“VB.NET实现图像操作的方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“VB.NET实现图像操作的方法”吧!
VB.NET最为一款功能强大的.NET编程语言,其实用价值在开发领域是公认的。我们在这里将会为大家介绍一下有关VB.NET图像操作的相关实现技巧,从另一角度去慢慢体会其功能应用的简便及强大性。
慢速,这是以像素点操作为代表:
Public Function fan_slow(ByVal
inputImage As Image) As Image
Dim pic As Bitmap =
New Bitmap(inputImage)
Dim i As Integer, j As Integer
Dim R As Integer, G As
Integer, B As Integer
Dim Width As Integer,
Height As Integer
Width = Pic.Width :
Height = Pic.Height
Dim myColor As Color
For i = 0 To Height - 1
For j = 0 To Width - 1
R = 255-pic.GetPixel(i, j).R
G = 255-pic.GetPixel(i, j).G
B = 255-pic.GetPixel(i, j).B
myColor = Color.FromArgb(R, G, B)
pic.SetPixel(i, j, myColor)
Next
Next
Return pic
End Function
快速,以内存指针操作为代表,这是VB.NET图像操作中最快的方法
Public Function fan_fast(ByVal inputImage As Image) As Image Dim R As Byte, G As Byte, B As Byte, Col As Byte Dim Width As Integer, Height As Integer Dim Pic As Bitmap = New Bitmap(inputImage) Width = Pic.Width : Height = Pic.Height Dim rect As New Rectangle(0, 0, Width, Height) Dim bmpData As BitmapData = Pic.LockBits(rect, ImageLockMode.ReadWrite, Pic.PixelFormat) Dim ptr As IntPtr = bmpData.Scan0'得到***个像素的指针 '数组操作() Dim bytes As Integer = bmpData.Stride * Height Dim rgbValues(bytes - 1) As Byte Marshal.Copy(ptr, rgbValues, 0, bytes) '将内存块复制到数组,这是该方法的关键 For k As Integer = 0 To rgbValues.Length - 4 Step 4 B = CByte(255 - rgbValues(k)) G = CByte(255 - rgbValues(k + 1)) R = CByte(255 - rgbValues(k + 2)) rgbValues(k) = B rgbValues(k + 1) = G rgbValues(k + 2) = R Next Marshal.Copy(rgbValues, 0, ptr, bytes)'再将数组复制到内存块 '数组操作结束 Pic.UnlockBits(bmpData) Return Pic End Function 还有一种以C#中的非安全代码 指针操作 public Bitmap fan_fast2(Bitmap b) { int width = b.Width; int height = b.Height; BitmapData data = b.LockBits(new Rectangle(0, 0, width, height), ImageLockMode.ReadWrite, PixelFormat.Format32bppArgb); unsafe { byte* p = (byte*)data.Scan0; int offset = data.Stride - width * 4; for (int y = 0; y < height; y++) { for (int x = 0; x < width; x++) { p[2] ^= 0xFF; p[1] ^= 0xFF; p[0] ^= 0xFF; p += 4; } p += offset; } b.UnlockBits(data); return b; } }
如果要改造成vb.net,就是这样,VB.NET图像操作的速度大约比数组加指针慢2-3倍
Public Function fan_fast2(ByVal inputImage As Image) As Image Dim R As Byte, G As Byte, B As Byte, Col As Byte Dim Width As Integer, Height As Integer Dim Pic As Bitmap = New Bitmap(inputImage) Width = Pic.Width : Height = Pic.Height Dim rect As New Rectangle(0, 0, Width, Height) Dim bmpData As BitmapData = Pic.LockBits(rect, ImageLockMode.ReadWrite, Pic.PixelFormat) Dim ptr As IntPtr = bmpData.Scan0'得到***个像素的指针 ''指针操作 在这种模式下,比数组操作要慢2-3倍 Dim offset As Integer = bmpData.Stride - bmpData.Width * 4 For j As Integer = 0 To Height - 1 For i As Integer = 0 To Width - 1 B = CByte(255 - Marshal.ReadByte(ptr)) G = CByte(255 - Marshal.ReadByte(ptr, 1)) R = CByte(255 - Marshal.ReadByte(ptr, 2)) Marshal.WriteByte(ptr, 0, B) Marshal.WriteByte(ptr, 1, G) Marshal.WriteByte(ptr, 2, R) ptr = CType(ptr.ToInt32 + 4, IntPtr) Next ptr = CType(ptr.ToInt32 + offset, IntPtr) Next ''指针操作结束 Pic.UnlockBits(bmpData) Return Pic End Function
到此,相信大家对“VB.NET实现图像操作的方法”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。