亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

C#圖像邊緣檢測(Roberts)的方法

 更新時間:2015年04月24日 09:32:18   作者:滄海一粟……  
這篇文章主要介紹了C#圖像邊緣檢測(Roberts)的方法,涉及C#操作圖像的相關技巧,需要的朋友可以參考下

本文實例講述了C#圖像邊緣檢測(Roberts)的方法。分享給大家供大家參考。具體如下:

//定義roberts算子函數
private static Bitmap robert(Bitmap a)
{
 int w = a.Width;
 int h = a.Height;
 try
 {
  Bitmap dstBitmap = new Bitmap(w, h, System.Drawing.Imaging.PixelFormat.Format24bppRgb);
  System.Drawing.Imaging.BitmapData srcData = a.LockBits(new Rectangle
   (0, 0, w, h), System.Drawing.Imaging.ImageLockMode.ReadOnly, System.Drawing.Imaging.PixelFormat.Format24bppRgb);
  System.Drawing.Imaging.BitmapData dstData = dstBitmap.LockBits(new Rectangle
   (0, 0, w, h), System.Drawing.Imaging.ImageLockMode.WriteOnly, System.Drawing.Imaging.PixelFormat.Format24bppRgb);
  unsafe
  {
   byte* pIn = (byte*)srcData.Scan0.ToPointer();
   byte* pOut = (byte*)dstData.Scan0.ToPointer();
   byte* p;
   int stride = srcData.Stride;
   for (int y = 0; y < h; y++)
   {
   for (int x = 0; x < w; x++)
   {
    //邊緣八個點像素不變
    if (x == 0 || x == w - 1 || y == 0 || y == h - 1)
    {
    pOut[0] = pIn[0];
    pOut[1] = pIn[1];
    pOut[2] = pIn[2];
    }
    else
    {
    int r0, r5, r6, r7;
    int g5, g6, g7, g0;
    int b5, b6, b7, b0;
    double vR, vG, vB;
    //右
    p = pIn + 3;
    r5 = p[2];
    g5 = p[1];
    b5 = p[0];
    //左下
    p = pIn + stride - 3;
    r6 = p[2];
    g6 = p[1];
    b6 = p[0];
    //正下
    p = pIn + stride;
    r7 = p[2];
    g7 = p[1];
    b7 = p[0];
    //中心點
    p = pIn;
    r0 = p[2];
    g0 = p[1];
    b0 = p[0];
    vR = (double)(Math .Abs (r0-r5)+Math .Abs ( r5-r7));
    vG = (double)(Math.Abs(g0 - g5) + Math.Abs(g5 - g7));
    vB = (double)(Math.Abs(b0 - b5) + Math.Abs(b5 - b7));
    if (vR > 0)
    {
     vR = Math.Min(255, vR);
    }
    else
    {
     vR = Math.Max(0, vR);
    }
    if (vG > 0)
    {
     vG = Math.Min(255, vG);
    }
    else
    {
     vG = Math.Max(0, vG);
    }
    if (vB > 0)
    {
     vB = Math.Min(255, vB);
    }
    else
    {
     vB = Math.Max(0, vB);
    }
    pOut[0] = (byte)vB;
    pOut[1] = (byte)vG;
    pOut[2] = (byte)vR;
    }
    pIn += 3;
    pOut += 3;
   }
   pIn += srcData.Stride - w * 3;
   pOut += srcData.Stride - w * 3;
   }
  }
  a.UnlockBits(srcData);
  dstBitmap.UnlockBits(dstData);
  return dstBitmap;
 }
 catch
 {
  return null;
 }
}

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

相關文章

  • c#日期間隔計算示例

    c#日期間隔計算示例

    這篇文章主要介紹了c#日期間隔計算類,最后有使用方法,需要的朋友可以參考下
    2014-02-02
  • winform實現(xiàn)創(chuàng)建最前端窗體的方法

    winform實現(xiàn)創(chuàng)建最前端窗體的方法

    這篇文章主要介紹了winform實現(xiàn)創(chuàng)建最前端窗體的方法,涉及C#窗體屬性設置的相關技巧,非常具有實用價值,需要的朋友可以參考下
    2015-08-08
  • C# AE之返回上一級和下一級的實戰(zhàn)操作

    C# AE之返回上一級和下一級的實戰(zhàn)操作

    這篇文章主要介紹了C# AE之返回上一級和下一級的實戰(zhàn)操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • C#關鍵字Check簡單介紹

    C#關鍵字Check簡單介紹

    這篇文章主要介紹了C#關鍵字Check功能描述及注意事項,checke關鍵字主要用于對整型類型算術運算和轉換顯式啟用溢出檢查,本文通過程序演示給大家詳細介紹,需要的朋友一起看看吧
    2022-04-04
  • 手動編譯C#代碼的方法

    手動編譯C#代碼的方法

    在本文里小編給大家分享的是關于手動編譯C#代碼的方法和步驟,對此有需要的朋友們可以學習下。
    2018-12-12
  • c#學習教程之JSON文件及解析實例

    c#學習教程之JSON文件及解析實例

    json作為互聯(lián)網上輕量便捷的數據傳輸格式,越來越受到重視,下面這篇文章主要給大家介紹了關于c#學習教程之JSON文件及解析的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-08-08
  • C#中Timer使用及解決重入問題

    C#中Timer使用及解決重入問題

    本文主要介紹了C#中Timer使用及解決重入問題的相關知識。具有很好的參考價值,下面跟著小編一起來看下吧
    2017-02-02
  • C#實現(xiàn)簡單的字符串加密

    C#實現(xiàn)簡單的字符串加密

    這篇文章介紹了C#實現(xiàn)字符串加密的方法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-06-06
  • C#?迭代器分部類與索引器詳情

    C#?迭代器分部類與索引器詳情

    這篇文章主要介紹了C#迭代器分部類與索引器詳情,迭代器?迭代器解決的是集合訪問的問題,提供一種方法順序訪問一個集合對象中的各個元素,而不暴露對象內部標
    2022-07-07
  • C#使用正則表達式實現(xiàn)漢字轉拼音

    C#使用正則表達式實現(xiàn)漢字轉拼音

    這篇文章主要為大家詳細介紹了C#如何使用正則表達式實現(xiàn)漢字轉拼音的功能,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2024-01-01

最新評論