日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

C#取色器

發布時間:2023/12/10 C# 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C#取色器 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
閑來無事,就寫了一個取色器。原理其實很簡單,只需要兩步,

??? 獲取鼠標光標的位置,
??? 獲取當前鼠標光標的位置的RGB顏色值。

獲取鼠標光標的位置:

System.Drawing.Point p = MousePosition;


獲取指定坐標的RGB顏色值,這里我們需要用到1個WIN32的API函數:GetPixel。

GetPixel函數的作用是檢索坐標點的像素的RGB顏色值,函數原型為COLORREF GetPixel(HDC hdc, int nXPos, int nYPos)

由于這個是系統提供的API函數,所以在C#中我們無法直接使用,我們需要把它"翻譯"一下,以便讓C#調用:
復制代碼

/// <summary>
/// 該函數檢索指定坐標點的像素的RGB顏色值。
/// </summary>
/// <param name="hDC">設備環境句柄。</param>
/// <param name="nXPos">指定要檢查的像素點的邏輯X軸坐標。</param>
/// <param name="nYPos">指定要檢查的像素點的邏輯Y軸坐標。</param>
/// <returns>返回值是該象像點的RGB值。如果指定的像素點在當前剪輯區之外;那么返回值是CLR_INVALID。</returns>
[DllImport("gdi32")]
public static extern uint GetPixel(IntPtr hDC, int nXPos, int nYPos);

復制代碼

該函數的X,Y坐標我們已經獲取到了,但是設備環境句柄hDC如何獲取呢,這里我們又要用到一個WIN32的API函數:GetDC。

GetDC函數的作用是檢索顯示設備上下文環境的句柄,函數原型為HDC GetDC(HWND hWnd)

"翻譯"如下:
復制代碼

/// <summary>
/// 該函數檢索一指定窗口的客戶區域或整個屏幕的顯示設備上下文環境的句柄,
/// 以后可以在GDI函數中使用該句柄來在設備上下文環境中繪圖。
/// </summary>
/// <param name="hWnd">設備上下文環境被檢索的窗口的句柄,如果該值為NULL,GetDC則檢索整個屏幕的設備上下文環境。</param>
/// <returns>如果成功,返回指定窗口客戶區的設備上下文環境;如果失敗,返回值為Null。</returns>
[DllImport("user32")]
public static extern IntPtr GetDC(IntPtr hWnd);

復制代碼

由于是非托管代碼,所以獲取到的環境句柄,我們需要手動釋放掉。這里又要用到一個API函數:ReleaseDC
ReleaseDC函數的作用是該函數釋放設備上下文環境,函數原型為int ReleaseDC(HWND hWnd, HDC hdc)

"翻譯"如下:
復制代碼

/// <summary>
/// 該函數釋放設備上下文環境(DC)供其他應用程序使用。函數的效果與設備上下文環境類型有關。
/// 它只釋放公用的和設備上下文環境,對于類或私有的則無效。
/// </summary>
/// <param name="hWnd">指向要釋放的設備上下文環境所在的窗口的句柄。</param>
/// <param name="hDC">指向要釋放的設備上下文環境的句柄。</param>
/// <returns>如果釋放成功,則返回值為1;如果沒有釋放成功,則返回值為0。</returns>
[DllImport("user32")]
public static extern int ReleaseDC(IntPtr hWnd, IntPtr hDC);

復制代碼

接下來開始寫代碼了。

頁面布局如下:

整體的代碼也是很簡單的。
復制代碼

using System;
using System.Drawing;
using System.Windows.Forms;
using JackyHelper;

namespace GetColor
{
??? public partial class MainForm : Form
??? {
??????? /// <summary>
??????? /// 顯示設備上下文環境的句柄。
??????? /// </summary>
??????? private IntPtr _hdc = IntPtr.Zero;

??????? /// <summary>
??????? /// 指向窗口的句柄。
??????? /// </summary>
??????? private readonly IntPtr _hWnd = IntPtr.Zero;

??????? public MainForm()
??????? {
??????????? InitializeComponent();
??????? }

??????? private void timer1_Tick(object sender, EventArgs e)
??????? {
??????????? System.Drawing.Point p = MousePosition;

??????????? tsslCursorPos.Text = string.Format("X:{0},Y:{1}", p.X, p.Y);

??????????? uint color = Win32Helper.GetPixel(_hdc, p.X, p.Y);
??????????? byte r = Win32Helper.GetRValue(color);
??????????? byte g = Win32Helper.GetGValue(color);
??????????? byte b = Win32Helper.GetBValue(color);

??????????? txtR.Text = Convert.ToString(r);
??????????? txtG.Text = Convert.ToString(g);
??????????? txtB.Text = Convert.ToString(b);

??????????? picColor.BackColor = Color.FromArgb(r, g, b);
??????????? txtHexColor.Text = "#" + r.ToString("X").PadLeft(2, '0') + g.ToString("X").PadLeft(2, '0') +
?????????????????????????????? b.ToString("X").PadLeft(2, '0');
??????? }

??????? /// <summary>
??????? /// 取色按鈕按下
??????? /// </summary>
??????? /// <param name="sender"></param>
??????? /// <param name="e"></param>
??????? private void btnGetColor_MouseDown(object sender, MouseEventArgs e)
??????? {
??????????? _hdc = Win32Helper.GetDC(_hWnd);
??????????? Cursor = Cursors.Cross;
??????????? timer1.Enabled = true;
??????? }

??????? /// <summary>
??????? /// 取色按鈕釋放
??????? /// </summary>
??????? /// <param name="sender"></param>
??????? /// <param name="e"></param>
??????? private void btnGetColor_MouseUp(object sender, MouseEventArgs e)
??????? {
??????????? Win32Helper.ReleaseDC(_hWnd, _hdc);
??????????? Cursor = Cursors.Default;
??????????? timer1.Enabled = false;
??????????? Text = "取色器 By Jacky QQ:773091523";
??????? }
??? }
}

復制代碼
復制代碼

??????? /// <summary>
??????? /// 2014-12-5 21:43:51
??????? /// 獲取一個RGB顏色值中的紅色強度值。
??????? /// </summary>
??????? /// <param name="rgb">指定的RGB顏色值。</param>
??????? /// <returns></returns>
??????? public static byte GetRValue(uint rgb)
??????? {
??????????? return (byte)rgb;
??????? }

??????? /// <summary>
??????? /// 2014-12-5 21:51:24
??????? /// 獲取一個RGB顏色值中的綠色強度值。
??????? /// </summary>
??????? /// <param name="rgb">指定的RGB顏色值。</param>
??????? /// <returns></returns>
??????? public static byte GetGValue(uint rgb)
??????? {
??????????? return (byte)(((ushort)(rgb)) >> 8);
??????? }

??????? /// <summary>
??????? /// 2014-12-5 21:52:37
??????? /// 獲取一個RGB顏色值中的藍色強度值。
??????? /// </summary>
??????? /// <param name="rgb">指定的RGB顏色值。</param>
??????? /// <returns></returns>
??????? public static byte GetBValue(uint rgb)
??????? {
??????????? return (byte)(rgb >> 16);
??????? }

復制代碼

不足之處,還望各位大神指正,不勝感激。

總結

以上是生活随笔為你收集整理的C#取色器的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 女女高潮h冰块play失禁百合 | 成年男女免费视频 | 亚洲日本中文字幕 | 精品福利电影 | 欧美日韩一区二区三区电影 | 亚洲你懂的 | 蜜臀av色欲a片无码精品一区 | 女同性做爰全过程 | 一区二区在线精品 | 久久特黄视频 | 日韩综合网站 | 日本久久久久久久久 | 成年人黄色片网站 | 亚洲色图影院 | 在线免费色 | 三级电影在线看 | 国产麻豆成人传媒免费观看 | 精品电影在线观看 | 日本精品一区视频 | av黄色网| 色www国产亚洲阿娇 自拍一区在线 | 欧美极品视频在线观看 | 69久久 | 久久国产精品一区 | 打屁股调教视频 | 一个人免费在线观看视频 | 三级三级久久三级久久18 | 在线午夜| 国产精品久久久久毛片大屁完整版 | 肉视频在线观看 | 波多野结衣高清在线 | 啪啪.com| 欧美春色| 69精品人人 | 爆乳熟妇一区二区三区霸乳 | 一道本久在线中文字幕 | 最新成人| 美国成人av | 国产成人综合在线视频 | 99视频国产精品免费观看a | 4438五月天 | √天堂资源地址在线官网 | 国产性猛交| 新版天堂资源中文8在线 | 天堂在线中文8 | 久久视频免费看 | 女女互磨互喷水高潮les呻吟 | 九七影院在线观看免费观看电视 | 福利电影在线播放 | 国产网站大全 | 国产专区精品 | 国产在线色 | 欧美jizzhd精品欧美18 | 国产99久久九九精品无码 | 神马久久香蕉 | 超碰免费在线观看 | 久久人人插 | 久久a毛片 | 欧美草草 | 亚洲欧洲国产日韩 | 日韩午夜免费视频 | 爱爱视频网站 | 涩涩小网站 | 亚洲精品乱码久久久久久按摩观 | 91看片看淫黄大片 | 精品人妻一区二区三区四区五区 | 久久免费大片 | 欧美日韩第一区 | 国产毛片一区二区三区 | 一区二区三区在线观看免费 | 天天综合天天干 | 免费a级网站 | 91久久伊人 | 成人自拍视频在线观看 | 无码人妻aⅴ一区二区三区玉蒲团 | av免费大片 | 日日夜夜艹| 97在线免费视频 | 亚洲一区二区精品在线观看 | 国产做受入口竹菊 | 不卡在线视频 | 亚洲色图影院 | 女同互舔视频 | 日韩在线| 午夜在线观看视频网站 | 日本肉体xxxⅹ裸体交 | 51成人网| 午夜精品极品粉嫩国产尤物 | 五月婷婷激情五月 | 亚洲第一色网站 | 亚洲欧美日韩在线播放 | 日本一区二区免费视频 | 爽妇综合网 | 日日摸日日干 | 日本一区二区三区免费看 | 欧美性xxxx | 激情都市一区二区 | 日韩精品在线观看AV | 色妞色视频一区二区三区四区 |