欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C#實現(xiàn)簡易灰度圖和酷炫HeatMap熱力圖winform(附DEMO)

 更新時間:2021年12月10日 16:32:27   作者:小康師兄  
本文主要介紹了C#實現(xiàn)簡易灰度圖和酷炫HeatMap熱力圖winform(附DEMO),文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

一、效果展示

在這里插入圖片描述

在這里插入圖片描述

二、隨機生成熱力點

熱力點類

    class HeatPoint
    {
        public int X;
        public int Y;
        public byte Intensity;
        public HeatPoint(int iX, int iY, byte bIntensity)
        {
            X = iX;
            Y = iY;
            Intensity = bIntensity;
        }
    }

隨機生成熱力點

privatevoid generateBtn_Click(object sender, EventArgs e)
{
    Random rRand = new Random();
    for (int i = 0; i < 500; i++)
    {
        int iX = rRand.Next(0, 800);
        int iY = rRand.Next(0, 800);
        byte iIntense = (byte)rRand.Next(0, 180);
        heatPoints.Add(new HeatPoint(iX, iY, iIntense));
    }
    UpdateView();
}

三、灰度圖生成解析

private Bitmap CreateIntensityMask(Bitmap bitmap, List<HeatPoint> aHeatPoints)
{
    Graphics graphics = Graphics.FromImage(bitmap);
    graphics.Clear(System.Drawing.Color.White);
    foreach (HeatPoint point in aHeatPoints)
    {
        if (point.Intensity * 30 / 180 == 0)
            continue;
        DrawHeatPoint(graphics, point, point.Intensity * 30 / 180);
        //DrawHeatPoint(graphics, point, 15);
    }
    return bitmap;
}

//此方法用于在繪圖表面上繪制實際的徑向漸變“點”。這可能是整個項目中最重要的方法,因為它可以處理不同大小和密度的繪圖點。
private void DrawHeatPoint(Graphics graphics, HeatPoint HeatPoint, int radius)
{
    List<System.Drawing.Point> pointsList = new List<System.Drawing.Point>();  
    for (double degrees = 0; degrees <= 360; degrees += 10)
    {
        // 在定義半徑的圓的圓周上繪制新點
        // 使用點坐標、半徑和角度
        // 計算這個迭代點在圓上的位置
        System.Drawing.Point point = new System.Drawing.Point();
        point.X = Convert.ToInt32(HeatPoint.X + radius * Math.Cos((Math.PI / 180) * degrees));
        point.Y = Convert.ToInt32(HeatPoint.Y + radius * Math.Sin((Math.PI / 180) * degrees));
        pointsList.Add(point);
    }


    // 創(chuàng)建新的顏色混合來告訴 PathGradientBrush 使用什么顏色以及放置它們的位置
    ColorBlend colorBlend = new ColorBlend(3);

    // 計算比例以將字節(jié)強度范圍從 0-255 縮放到 0-1
    float fRatio = 1F / Byte.MaxValue;
    // 預(yù)計算字節(jié)最大值的一半
    byte bHalf = Byte.MaxValue / 2;
    // 將其中心值的強度從低高翻轉(zhuǎn)到高低
    int iIntensity = (byte)(HeatPoint.Intensity - ((HeatPoint.Intensity - bHalf) * 2));
    // 存儲縮放和翻轉(zhuǎn)的強度值以用于梯度中心位置
    float fIntensity = iIntensity * fRatio;
    // 定義漸變顏色的位置,使用intesity將中間顏色調(diào)整為
    colorBlend.Positions = new float[3] { 0, fIntensity, 1 };
    colorBlend.Colors = new System.Drawing.Color[3]
    {
        System.Drawing.Color.FromArgb(0, System.Drawing.Color.White),
        System.Drawing.Color.FromArgb(HeatPoint.Intensity, System.Drawing.Color.Black),
        System.Drawing.Color.FromArgb(HeatPoint.Intensity, System.Drawing.Color.Black)
    };

    // 創(chuàng)建新的 PathGradientBrush 以使用圓周點創(chuàng)建徑向漸變
    PathGradientBrush brush = new PathGradientBrush(pointsList.ToArray());
    // 將顏色混合傳遞給 PathGradientBrush 以指示它如何生成漸變
    brush.InterpolationColors = colorBlend;
    graphics.FillPolygon(brush, pointsList.ToArray());
}

四、熱力圖生成解析

public static Bitmap Colorize(Bitmap Mask, byte Alpha)
{
    Bitmap Output = new Bitmap(Mask.Width, Mask.Height, System.Drawing.Imaging.PixelFormat.Format32bppArgb);
    Graphics Surface = Graphics.FromImage(Output);
    Surface.Clear(System.Drawing.Color.Transparent);

    // 構(gòu)建一組顏色映射以將我們的灰度蒙版重新映射為全色
    // 接受一個 alpha 字節(jié)來指定輸出圖像的透明度
    ColorMap[] Colors = CreatePaletteIndex(Alpha);

    // 創(chuàng)建新的圖像屬性類來處理顏色重新映射
    // 注入我們的顏色映射數(shù)組來指示圖像屬性類如何進行著色
    ImageAttributes Remapper = new ImageAttributes();
    Remapper.SetRemapTable(Colors);

    // 使用新的顏色映射方案將我們的蒙版繪制到我們的內(nèi)存位圖工作表面上
    Surface.DrawImage(Mask, new System.Drawing.Rectangle(0, 0, Mask.Width, Mask.Height), 0, 0, Mask.Width, Mask.Height, GraphicsUnit.Pixel, Remapper);
    return Output;
}

private static ColorMap[] CreatePaletteIndex(byte Alpha)
{
    ColorMap[] OutputMap = new ColorMap[256];

    Assembly myAssembly = Assembly.GetExecutingAssembly();
    Stream myStream = myAssembly.GetManifestResourceStream("熱力圖Demo.Image.gradient-palette.jpg");
    Bitmap Palette = new Bitmap(myStream);
    for (int X = 0; X <= 255; X++)
    {
        OutputMap[X] = new ColorMap();
        OutputMap[X].OldColor = System.Drawing.Color.FromArgb(X, X, X);
        OutputMap[X].NewColor = System.Drawing.Color.FromArgb(Alpha, Palette.GetPixel(X, 0));
    }
    return OutputMap;
}

五、源碼下載

熱力圖Demo.zip

到此這篇關(guān)于C#實現(xiàn)簡易灰度圖和酷炫HeatMap熱力圖winform(附DEMO)的文章就介紹到這了,更多相關(guān)C#? 灰度圖和熱力圖內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • c# Newtonsoft 六個值得使用的特性(上)

    c# Newtonsoft 六個值得使用的特性(上)

    這篇文章主要介紹了c# Newtonsoft 六個值得使用的特性,文中示例代碼非常詳細,幫助大家更好的理解和學習,感興趣的朋友可以了解下
    2020-06-06
  • C#創(chuàng)建IIS虛擬目錄的方法

    C#創(chuàng)建IIS虛擬目錄的方法

    這篇文章主要介紹了C#創(chuàng)建IIS虛擬目錄的方法,實例分析了C#在IIS服務(wù)器上創(chuàng)建虛擬目錄的相關(guān)技巧,需要的朋友可以參考下
    2015-06-06
  • c#中的常用ToString()方法總結(jié)

    c#中的常用ToString()方法總結(jié)

    很多類都重寫了ToString方法, 導致很多類的tostring到底執(zhí)行了什么,有哪些參數(shù),都不清楚
    2012-10-10
  • c#中token的使用方法實例

    c#中token的使用方法實例

    本文主要介紹了c#中token的使用方法實例,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • Windows Form 分頁 具體實現(xiàn)

    Windows Form 分頁 具體實現(xiàn)

    其實功能實現(xiàn)很簡單。我做的是一個通用的分頁控件。項目時間很緊,可能有點粗糙。歡迎大家斧正。不說了直接貼代碼吧
    2013-12-12
  • C#實現(xiàn)單例模式的6種方法小結(jié)

    C#實現(xiàn)單例模式的6種方法小結(jié)

    這篇文章主要介紹了C#實現(xiàn)單例模式的6種方法,C#中實現(xiàn)單例有很多種方法,本文將按順序介紹非線程安全、完全懶漢式、線程安全和低/高性能集中版本,需要的朋友可以參考下
    2022-09-09
  • C#語言基礎(chǔ)——結(jié)構(gòu)體和枚舉類型全面解析

    C#語言基礎(chǔ)——結(jié)構(gòu)體和枚舉類型全面解析

    下面小編就為大家?guī)硪黄狢#語言基礎(chǔ)——結(jié)構(gòu)體和枚舉類型全面解析。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-07-07
  • WinForm實現(xiàn)自定義右下角提示效果的方法

    WinForm實現(xiàn)自定義右下角提示效果的方法

    這篇文章主要介紹了WinForm實現(xiàn)自定義右下角提示效果的方法,涉及WinForm自定義提示效果的實現(xiàn)方法,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-08-08
  • c#中string的特性介紹及注意事項小結(jié)

    c#中string的特性介紹及注意事項小結(jié)

    這篇文章主要給大家介紹了關(guān)于c#中string的特性介紹及注意事項的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用c#具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-11-11
  • DevExpress之ChartControl實現(xiàn)餅狀圖百分比演示實例

    DevExpress之ChartControl實現(xiàn)餅狀圖百分比演示實例

    這篇文章主要介紹了DevExpress之ChartControl實現(xiàn)餅狀圖百分比演示的方法,實例講述了窗體與圖形繪制函數(shù)的用法,需要的朋友可以參考下
    2014-10-10

最新評論