成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

迅速實(shí)現(xiàn)VB.NET圖像操作方法簡(jiǎn)介

開(kāi)發(fā) 后端
VB.NET圖像操作可以分為慢速及快速等方法來(lái)進(jìn)行實(shí)現(xiàn)。實(shí)際的操作方法應(yīng)當(dāng)按照我們特有的需求進(jìn)行正確的選擇。下面就一一分析各種方法的應(yīng)用。

VB.NET最為一款功能強(qiáng)大的.NET編程語(yǔ)言,其實(shí)用價(jià)值在開(kāi)發(fā)領(lǐng)域是公認(rèn)的。我們?cè)谶@里將會(huì)為大家介紹一下有關(guān)VB.NET圖像操作的相關(guān)實(shí)現(xiàn)技巧,從另一角度去慢慢體會(huì)其功能應(yīng)用的簡(jiǎn)便及強(qiáng)大性。 #t#

慢速,這是以像素點(diǎn)操作為代表:

  1. Public Function fan_slow(ByVal 
    inputImage As Image) As Image   
  2. Dim pic As Bitmap = 
    New Bitmap(inputImage)   
  3. Dim i As Integer, j As Integer   
  4. Dim R As Integer, G As 
    Integer, B As Integer   
  5. Dim Width As Integer, 
    Height As Integer   
  6. Width = Pic.Width : 
    Height = Pic.Height   
  7. Dim myColor As Color   
  8. For i = 0 To Height - 1   
  9. For j = 0 To Width - 1   
  10. R = 255-pic.GetPixel(i, j).R   
  11. G = 255-pic.GetPixel(i, j).G   
  12. B = 255-pic.GetPixel(i, j).B   
  13. myColor = Color.FromArgb(R, G, B)   
  14. pic.SetPixel(i, j, myColor)   
  15. Next   
  16. Next   
  17. Return pic   
  18. End Function  

快速,以內(nèi)存指針操作為代表,這是VB.NET圖像操作中最快的方法

  1. Public Function fan_fast(ByVal 
    inputImage As Image) As Image   
  2. Dim R As Byte, G As Byte, B As 
    Byte, Col As Byte   
  3. Dim Width As Integer, Height 
    As Integer   
  4. Dim Pic As Bitmap = New 
    Bitmap(inputImage)   
  5. Width = Pic.Width : 
    Height = Pic.Height   
  6. Dim rect As New Rectangle(0, 0, 
    Width, Height)   
  7. Dim bmpData As BitmapData = 
    Pic.LockBits(rect, ImageLockMode.
    ReadWrite, Pic.PixelFormat)   
  8. Dim ptr As IntPtr = bmpData.Scan0
    '得到***個(gè)像素的指針   
  9. '數(shù)組操作()   
  10. Dim bytes As Integer = 
    bmpData.Stride * Height   
  11. Dim rgbValues(bytes - 1) As Byte   
  12. Marshal.Copy(ptr, rgbValues, 0, bytes)
     '將內(nèi)存塊復(fù)制到數(shù)組,這是該方法的關(guān)鍵   
  13. For k As Integer = 0 To 
    rgbValues.Length - 4 Step 4   
  14. B = CByte(255 - rgbValues(k))   
  15. G = CByte(255 - rgbValues(k + 1))   
  16. R = CByte(255 - rgbValues(k + 2))   
  17. rgbValues(k) = B   
  18. rgbValues(k + 1) = G   
  19. rgbValues(k + 2) = R   
  20. Next   
  21. Marshal.Copy(rgbValues, 0, ptr, bytes)
    '再將數(shù)組復(fù)制到內(nèi)存塊   
  22. '數(shù)組操作結(jié)束   
  23. Pic.UnlockBits(bmpData)   
  24. Return Pic   
  25. End Function   
  26. 還有一種以C#中的非安全代碼 指針操作   
  27. public Bitmap fan_fast2(Bitmap b)   
  28. {   
  29. int width = b.Width;   
  30. int height = b.Height;   
  31. BitmapData data = b.LockBits
    (new Rectangle(0, 0, width, height), 
    ImageLockMode.ReadWrite, 
    PixelFormat.Format32bppArgb);   
  32. unsafe   
  33. {   
  34. byte* p = (byte*)data.Scan0;   
  35. int offset = data.Stride - width * 4; 
    for (int 
    y = 0; y < height; y++)   
  36. {   
  37. for (int x = 0; x < width; x++)   
  38. {   
  39. p[2] ^= 0xFF;   
  40. p[1] ^= 0xFF;   
  41. p[0] ^= 0xFF;   
  42. p += 4;   
  43. }   
  44. p += offset;   
  45. }   
  46. b.UnlockBits(data);   
  47. return b;   
  48. }   
  49. }  

如果要改造成vb.net,就是這樣,VB.NET圖像操作的速度大約比數(shù)組加指針慢2-3倍

  1. Public Function fan_fast2(ByVal 
    inputImage As Image) As Image   
  2. Dim R As Byte, G As Byte, 
    B As Byte, Col As Byte   
  3. Dim Width As Integer, 
    Height As Integer   
  4. Dim Pic As Bitmap = 
    New Bitmap(inputImage)   
  5. Width = Pic.Width : Height = 
    Pic.Height   
  6. Dim rect As New Rectangle
    (0, 0, Width, Height)   
  7. Dim bmpData As BitmapData = 
    Pic.LockBits(rect, ImageLockMode.
    ReadWrite, Pic.PixelFormat)   
  8. Dim ptr As IntPtr = bmpData.Scan0
    '得到***個(gè)像素的指針   
  9. ''指針操作 在這種模式下,比數(shù)組操作要慢2-3倍   
  10. Dim offset As Integer = bmpData.
    Stride - bmpData.Width * 4   
  11. For j As Integer = 0 To Height - 1   
  12. For i As Integer = 0 To Width - 1   
  13. B = CByte(255 - Marshal.ReadByte(ptr))   
  14. G = CByte(255 - Marshal.ReadByte(ptr, 1))   
  15. R = CByte(255 - Marshal.ReadByte(ptr, 2))   
  16. Marshal.WriteByte(ptr, 0, B)   
  17. Marshal.WriteByte(ptr, 1, G)   
  18. Marshal.WriteByte(ptr, 2, R)   
  19. ptr = CType(ptr.ToInt32 + 4, IntPtr)   
  20. Next   
  21. ptr = CType(ptr.ToInt32 + 
    offset, IntPtr)   
  22. Next   
  23. ''指針操作結(jié)束   
  24. Pic.UnlockBits(bmpData)   
  25. Return Pic   
  26. End Function  

VB.NET圖像操作的相關(guān)操作方法就為大家介紹到這里

責(zé)任編輯:曹凱 來(lái)源: 博客園
相關(guān)推薦

2010-01-07 11:07:20

VB.NET讀取INI

2010-01-07 10:28:04

VB.NET實(shí)現(xiàn)接口

2010-01-11 14:28:14

VB.NET操作Exc

2010-01-12 10:19:02

VB.NET操作GDI

2010-01-11 15:43:06

VB.NET類屬性

2010-01-21 15:56:31

VB.NET文本框

2010-01-07 10:46:27

VB.NET Sock

2009-10-30 15:37:23

VB.NET Sub創(chuàng)

2009-10-30 16:40:04

VB.NET Inte

2010-01-07 15:37:35

VB.NET ForNext循環(huán)

2009-10-29 13:38:05

VB.NET Shar

2010-01-15 17:51:51

VB.NET創(chuàng)建臨時(shí)文

2009-10-14 13:21:46

VB.NET Acco

2009-10-28 17:44:31

VB.NET語(yǔ)言

2010-01-15 16:29:47

VB.NET對(duì)象存儲(chǔ)

2010-01-11 15:54:48

VB.NET操作縮放圖

2010-01-18 10:26:19

VB.NET中心旋轉(zhuǎn)圖

2010-01-13 17:47:59

VB.NET拖放

2010-01-15 16:12:40

VB.NET調(diào)用DLL

2010-01-08 18:10:44

VB.NET實(shí)現(xiàn)任務(wù)欄
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 精品久久久久香蕉网 | 亚洲国产一区二区在线 | 日韩视频在线观看中文字幕 | 日韩精品在线观看网站 | 亚洲一区二区三区免费在线观看 | 成人在线免费网站 | 欧美激情一区二区三级高清视频 | 国产区视频在线观看 | 国产午夜精品久久久 | 天堂三级 | 在线精品国产 | 中文成人无字幕乱码精品 | 亚洲va国产日韩欧美精品色婷婷 | 国产成人精品午夜视频免费 | 午夜寂寞影院在线观看 | 亚洲精品免费观看 | 国产精品日韩一区二区 | 国产精品久久久一区二区三区 | 日韩一区精品 | 成人精品在线观看 | 羞羞网站在线观看 | 国产剧情一区二区三区 | 精品熟人一区二区三区四区 | 久久久久九九九女人毛片 | 国产精品一区二区日韩 | 中文二区 | 性做久久久久久免费观看欧美 | 久久久久久亚洲精品 | 日韩和的一区二区 | 久久精品亚洲成在人线av网址 | 国产在线精品一区二区三区 | 欧美日韩久 | 亚洲一区二区精品视频 | 九九九视频在线观看 | 国产精品s色 | 欧美日韩在线一区二区 | 久草新在线 | 国产一区二区视频在线 | 一区二区三区精品视频 | 中文字幕日韩三级 | 狠狠做六月爱婷婷综合aⅴ 国产精品视频网 |