工作中有时需要将颜色的到模式转换,比如rgb888与rgb565之间,有时还需要选择图片上某处颜色,还要知道RGB值。为了方便,便做了个小软件。

1.rgb888与rgb565的转换

如下,888到565是有损失的。

        //根据RGB数值改变色盘颜色private void set_color(){if (btn_trans.Text.ToLower() == "rgb888"){colorshow.BackColor = Color.FromArgb((int)setR.Value, (int)setG.Value, (int)setB.Value);}else{colorshow.BackColor = Color.FromArgb((int)setR.Value << 3, (int)setG.Value << 2, (int)setB.Value << 3);}}

2.颜色拾取

这里要用到WINDOWS API

        public Timer tim_getcolor = new Timer();
 [DllImport("user32.dll")]//取设备场景 private static extern IntPtr GetDC(IntPtr hwnd);//返回设备场景句柄 [DllImport("gdi32.dll")]//取指定点颜色 private static extern int GetPixel(IntPtr hdc, Point p);
 tim_getcolor.Interval = 200;tim_getcolor.Tick += delegate{Point p = new Point(MousePosition.X, MousePosition.Y);//取置顶点坐标 IntPtr hdc = GetDC(new IntPtr(0));//取到设备场景(0就是全屏的设备场景) int c = GetPixel(hdc, p);//取指定点颜色 , Color.FromArgb(c)中c是argb或rgb排列,这里是bgrint r = (c & 0xFF);//转换R int g = (c & 0xFF00) / 256;//转换G int b = (c & 0xFF0000) / 65536;//转换B this.colorshow.BackColor = Color.FromArgb(r, g, b);lab_loc.Text = p.ToString(); //显示坐标};

处理按钮点击事件

        private void btn_pick_Click(object sender, EventArgs e){if ( isClickInBtn == false){this.btn_pick.Enabled = false;tim_getcolor.Enabled = true;tim_getcolor.Start();}isClickInBtn = false;}

还有全局鼠标按下事件,这里需要使用鼠标的钩子函数

        //按下鼠标键事件private void mh_MouseDownEvent(object sender, MouseEventArgs e){if ( tim_getcolor.Enabled == true && e.Button == MouseButtons.Left){tim_getcolor.Stop();tim_getcolor.Enabled = false;allowTansColor = false;colorTOrgbval(this.btn_trans.Text, this.colorshow.BackColor);allowTansColor = true;setrgbvalTXT();this.btn_pick.Enabled = true;Point formPoint = this.btn_pick.PointToClient(Control.MousePosition);if (this.btn_pick.ClientRectangle.Contains(formPoint)) //点到按钮{isClickInBtn = true;}   }}

由于代码太多没法全部贴出,感兴趣的可以下载

1.exe文件:http://download.csdn.net/download/wangzibigan/10165053

2.源码:http://download.csdn.net/download/wangzibigan/10165055

3.效果

PS:发现获取屏幕像素时加个放大镜功能会好一点

1.创建一没边框窗体A。

2.点击获取按钮时,获取屏幕位图。

3.将桌面位图的相应部分绘制到窗体A。

     FormMagnifier formMagnifier = new FormMagnifier(); //新建一窗体,窗体为无边框
     ScreenBmp = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height);Graphics gs = Graphics.FromImage(ScreenBmp);   gs.CopyFromScreen(new Point(0, 0), new Point(0, 0), ScreenBmp.Size);//截屏gs.Dispose();
     formMagnifier.Location = new Point(MousePosition.X -formMagnifier.Width/ 2, MousePosition.Y -formMagnifier.Height/2);formMagnifier.BackgroundImage = new Bitmap(formMagnifier.Width, formMagnifier.Height);gs = Graphics.FromImage(formMagnifier.BackgroundImage);gs.DrawImage(ScreenBmp, new Rectangle(0, 0, formMagnifier.Width, formMagnifier.Height), new Rectangle(MousePosition.X - formMagnifier.Width / magnification / 2, MousePosition.Y - formMagnifier.Height / magnification / 2, formMagnifier.Width / magnification, formMagnifier.Height / magnification), GraphicsUnit.Pixel);gs.Dispose();formMagnifier.Show();

在定时器事件里加上

formMagnifier.Location  = new Point(MousePosition.X - formMagnifier.Width / 2, MousePosition.Y - formMagnifier.Height / 2);Graphics gs = formMagnifier.CreateGraphics();gs.DrawImage(ScreenBmp, new Rectangle(0, 0, formMagnifier.Width, formMagnifier.Height), new Rectangle(MousePosition.X - formMagnifier.Width / magnification/2, MousePosition.Y - formMagnifier.Height / magnification / 2, formMagnifier.Width / magnification, formMagnifier.Height / magnification), GraphicsUnit.Pixel);gs.Dispose();

效果如下:(我用系统自带的工具截图,鼠标截不了,实际上是有鼠标光标的)

颜色转换助手RGB888-565相关推荐

  1. [JS] HEX颜色转换成RGBA

    写了一个函数,可以把hex格式的颜色转为rgba的格式 实际上不是颜色转换,主要是slice()函数的使用吧,当成字符串理解就好. function change(hex) {if (hex.leng ...

  2. 使用Python和OpenCV在图像之间执行超快速的颜色转换

    使用Python和OpenCV在图像之间执行超快速的颜色转换 1. 效果图 2. 原理 2.1 颜色转移算法 2.2 步骤 2.3 算法改进 3. 源码 参考 这篇博客将介绍如何使用Python和Op ...

  3. android md风格Switch,带有图标动画和颜色转换的Switch – material...

    Material Animated Switch 一个MD风格的Switch,带有图标动画和颜色转换. 如何使用 默认情况下显示收件箱锁定开关 android:id="@+id/pin&qu ...

  4. c语言提取颜色,C语言颜色转换宏

    C语言颜色转换宏 #define COLOR_BPP16_RGB555 /* Win RGB */ #define COLOR_RGB(r,g,b) ((COLORREF)(((BYTE)(r)|(( ...

  5. 计算机中的颜色XIII——颜色转换的快速计算公式

    本文的公式的基础都是在前文的基础上的.详情请参看前文: 计算机中的颜色I--颜色概述 计算机中的颜色II--VB2005中的Color结构 计算机中的颜色III--HSV表示方法 计算机中的颜色IV- ...

  6. DCMTK:测试dcmiod的颜色转换功能

    DCMTK:测试dcmiod的颜色转换功能 测试dcmiod的颜色转换功能 测试dcmiod的颜色转换功能 #include "dcmtk/config/osconfig.h" # ...

  7. php rgb,php颜色转换函数hex-rgb

    一个很使用的php颜色转换函数,用于将hex表示的颜色值转换为rgb格式.例如:#dfdfdf转换成(239,239,239) 用法: var_dump(hex2rgb("#efefef&q ...

  8. iOS开发-16进制颜色转换

    项目中经常会用到颜色转换,有的是通过十六进制转成数字转颜色,想简单的点直接通过字符串转一下,简单扩展了一下分类UIColor,代码如下: +(UIColor *)colorWithHex:(NSStr ...

  9. html color 转换,Color颜色转换的三种方式(c#)

    Color颜色转换 1.在.net中如何把一个色名称转换成HTML色? System.Drawing.Color color = System.Drawing.Color.White; string ...

最新文章

  1. 程序员能成为设计师吗
  2. tinymce4.x 上传本地图片(自己写个插件)
  3. Centos 7 安装 rabbitmq 3.6.6
  4. 算力大战是BCH最坏的一种处理方式
  5. 【转载】程序员有哪些电脑技能让外行感到神奇?
  6. Angular Forms - 自定义 ngModel 绑定值的方式
  7. throwable_您想了解的所有Throwable
  8. junit5和junit4_JUnit 5 –条件
  9. python index 报错_python基础语法常见报错类型
  10. 想做数学建模?先看看这些MATLAB函数吧!
  11. Expert C Programming学习笔记(1)
  12. 读取xml数据装配到字典中之应用场景
  13. AppStore图片尺寸以及内容要求Screenshot specifications
  14. Excel VBA | 一键批量生成对账单
  15. 方差齐性检验python实现
  16. 为什么年终奖是一个彻头彻尾的职场圈套?
  17. 安卓 usb音量调节_各大厂商不重视的音量调节键,被一个安卓APP玩出花了
  18. C++课设-学生信息管理系统
  19. 自动化横行的今天,手工测试如何杀出一条血路?
  20. 卡巴斯基发布操作系统Kaspersky OS

热门文章

  1. java导出word纸张方向_java导出word的几种方式
  2. 割平面法(Cutting Planes )
  3. ps界面为啥突然变大了_对新手非常友好的5个PS小技巧
  4. 【Unity】让动画系统支持相对坐标
  5. ArcGIS基础实验操作100例--实验13 数字化面图形的技巧
  6. C#子窗体控制父窗体dgv刷新
  7. 模拟手机定位软件有哪些,推荐几款
  8. 详解标准方程法(内含公式推导和代码)
  9. 056.单链表就地逆置
  10. 如何调用外部webservice 接口来发送短信