真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

.NET圖片快速處理的幾種方法分別是什么

本篇文章給大家分享的是有關(guān).NET圖片快速處理的幾種方法分別是什么,小編覺得挺實(shí)用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

站在用戶的角度思考問題,與客戶深入溝通,找到冀州網(wǎng)站設(shè)計(jì)與冀州網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶體驗(yàn)好的作品,建站類型包括:成都網(wǎng)站建設(shè)、網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、域名與空間、網(wǎng)絡(luò)空間、企業(yè)郵箱。業(yè)務(wù)覆蓋冀州地區(qū)。

這里首先要介紹一個(gè)類System.Drawing.Imaging.BitmapData,直接實(shí)例化這個(gè)類沒有用處,我們需要將一個(gè)Bitmap鎖定到內(nèi)存中,來獲取一個(gè)BitmapData的實(shí)例。.NET圖片快速處理方法如下:

使用Bitmap.LockBits(Rectangle rect, ImageLockMode flags, PixelFormat format)或者它的另一個(gè)重載Bitmap.LockBits(Rectangle rect, ImageLockMode flags, PixelFormat format, BitmapData bitmapData)來將圖像數(shù)據(jù)鎖定到內(nèi)存中,以此來獲取一個(gè)與指定圖片相關(guān)聯(lián)的BitmapData實(shí)例。

在BitmapData中有一個(gè)重要的屬性Scan0,它是一個(gè)指針,指向了圖片數(shù)據(jù)所在內(nèi)存的***個(gè)位置。使用內(nèi)存跟蹤,將Scan0的值填入地址中,可以看到內(nèi)存的分配情況(Format32bppArgb顏色深度):

.NET圖片快速處理的幾種方法分別是什么

這些值與圖片像素的對應(yīng)關(guān)系是這樣的:

.NET圖片快速處理的幾種方法分別是什么

現(xiàn)在我們可以使用System.Runtime.InteropServices.Marshal.WriteByte(IntPtr ptr, byte val)的方法來更改指定位置的像素值了,修改后只要再調(diào)用一次Bitmap.UnlockBits(BitmapData bitmapdata)來解鎖內(nèi)存就可以了,例如:

private void LockUnlockBitsExample(PaintEventArgs e)  {  Bitmap bmp = new Bitmap("c:\\fakePhoto.jpg");  Rectangle rect = new Rectangle(0, 0, bmp.Width, bmp.Height);  System.Drawing.Imaging.BitmapData bmpbmpData =  bmp.LockBits(rect, System.Drawing.Imaging.ImageLockMode.ReadWrite,  bmp.PixelFormat);  IntPtr ptr = bmpData.Scan0;  int bytes = bmp.Width * bmp.Height * 3;  byte[] rgbValues = new byte[bytes];  for (int counter = 0; counter < rgbValues.Length; counter += 3)  {  Marshal.WriteByte(ptr, counter, 255);  }  bmp.UnlockBits(bmpData);  e.Graphics.DrawImage(bmp, 0, 0);  }

此.NET圖片快速處理示例將圖片上所有像素的Red向量設(shè)置為255。運(yùn)行此實(shí)例可以看到圖片變色了。

每次調(diào)用System.Runtime.InteropServices.Marshal.WriteByte(IntPtr ptr, byte val)的方法并不方便,因此我們構(gòu)造一個(gè)ColorBgra類用來儲存這4個(gè)顏色向量,它的主要代碼是這樣的(參考自Paint.Net提供的源碼):

[StructLayout(LayoutKind.Explicit)]  public struct ColorBgra  {  [FieldOffset(0)]  public byte B;     [FieldOffset(1)]  public byte G;     [FieldOffset(2)]  public byte R;     [FieldOffset(3)]  public byte A;   ///  /// Lets you change B, G, R, and A at the same time.  ///  [FieldOffset(0)]  public uint Bgra;  public override string ToString()  {  return "B: " + B + ", G: " + G + ", R: " + R + ", A: " + A;  }  }

使用這個(gè)類在聲明為unsafe的上下文中就可以通過計(jì)算偏移量的辦法尋址找到指定位置像素的地址(指針),例如在Format32bppArgb顏色深度的圖片中可以這樣計(jì)算:

public unsafe ColorBgra* GetPointAddress(int x, int y)  {  return y * 4 + x;  }

將計(jì)算返回的指針賦給ColorBgra*。之后使用如下方法:

color->B = i;  color ->G = i;  color ->R = i;  color ->A = i;

直接把值寫入內(nèi)存中,實(shí)現(xiàn).NET圖片快速處理操作。

以上就是.NET圖片快速處理的幾種方法分別是什么,小編相信有部分知識點(diǎn)可能是我們?nèi)粘9ぷ鲿姷交蛴玫降?。希望你能通過這篇文章學(xué)到更多知識。更多詳情敬請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。


文章題目:.NET圖片快速處理的幾種方法分別是什么
URL網(wǎng)址:http://weahome.cn/article/ijihph.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部