国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C# > 正文

C#反色處理及其效率問題分析

2020-01-24 01:44:50
字體:
來源:轉載
供稿:網友

本文實例分析了C#反色處理及其效率問題。分享給大家供大家參考。具體分析如下:

網上很多這方面的資料,常看到的版本如下面:

public Bitmap RePic(Bitmap thispic, int width, int height) {Bitmap bm = new Bitmap(width, height);//初始化一個記錄后的圖片的對象int x, y, resultR, resultG, resultB;Color pixel;for (x = 0; x < width; x++) {for (y = 0; y < height; y++) {pixel = thispic.GetPixel(x, y); //獲取當前坐標的像素值resultR = 255 - pixel.R; //反紅resultG = 255 - pixel.G; //反綠resultB = 255 - pixel.B; //反藍bm.SetPixel(x, y, Color.FromArgb(resultR, resultG, resultB)); //繪圖}}return bm; //返回經過處理后的圖片}

上述代碼執行沒有問題,但效率存在很大一個問題,執行起來很慢,測試了一下1920 x 1080分辨率,執行時間8秒左右;2560 x 1920分辨率,執行時間達到了15秒左右,當然小圖片處理起來要快一些,當然也與CPU配置有關。

后來又嘗試了另外一種方法,利用System.Drawing.Imaging 中的BitmapData 和LockBits方法,其中用到了指針,代碼如下:

public Bitmap reversePic(Bitmap thispic) {Bitmap src = new Bitmap(Image.FromHbitmap(thispic.GetHbitmap())); // 加載圖像BitmapData srcdat = src.LockBits(new Rectangle(Point.Empty, src.Size), ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb); // 鎖定位圖unsafe // 不安全代碼{byte* pix = (byte*)srcdat.Scan0; // 像素首地址for (int i = 0; i < srcdat.Stride * srcdat.Height; i++)pix[i] = (byte)(255 - pix[i]);}src.UnlockBits(srcdat); // 解鎖return src;}

經測試效率明顯提高了許多,2560 x 1920分辨率,執行時間不到1秒,看來用指針操作果然效率會很高,但C#中對指針的操作視為不安全的,使用unsafe關鍵字后,編譯出錯,得將編譯器選項設置為允許對使用 unsafe 關鍵字的代碼進行編譯。方法如下:

在 Visual Studio 開發環境中設置此編譯器選項

1. 打開項目的 “屬性”頁。

2. 單擊 “生成”屬性頁。

3. 選中 “允許不安全代碼”復選框。

希望本文所述對大家的C#程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 南京市| 山阴县| 家居| 彩票| 石阡县| 商水县| 内丘县| 武强县| 灵璧县| 渝中区| 武强县| 大方县| 肥东县| 镇平县| 安阳市| 朝阳县| 五莲县| 花垣县| 碌曲县| 永善县| 大渡口区| 新兴县| 含山县| 礼泉县| 阳春市| 宜州市| 巴彦淖尔市| 双鸭山市| 平湖市| 新乡市| 巨野县| 澄迈县| 邹平县| 江安县| 白玉县| 乾安县| 剑川县| 天津市| 永泰县| 浦城县| 开平市|