Win32 RGB三原色

以前看到三原色的图案,一直很好奇是如何画出来。后来终于搞清楚了,其实很简单,实际上就是RGB三个分量的"位与"运算。

下面给出Win32绘制三原色图案的例子,特此记录在此:

 1 #include <windows.h>
 2
 3 LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
 4
 5
 6 int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int iCmdShow)
 7 {
 8     static TCHAR szAppName[]=TEXT("RGB_SRCPAINT");
 9     HWND hWnd;
10     MSG msg;
11     WNDCLASS wc= {sizeof(WNDCLASS)};
12     wc.style=CS_HREDRAW|CS_VREDRAW;
13     wc.lpfnWndProc=WndProc;
14     wc.cbClsExtra=0;
15     wc.cbWndExtra=0;
16     wc.hInstance=hInstance;
17     wc.hIcon=LoadIcon(NULL,IDI_APPLICATION);
18     wc.hCursor=LoadCursor(NULL,IDC_ARROW);
19     wc.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
20     wc.lpszMenuName=NULL;
21     wc.lpszClassName=szAppName;
22     if(!RegisterClass(&wc)) {
23         MessageBox(NULL,TEXT("error"),szAppName,MB_ICONERROR|MB_OK);
24         return 0;
25     }
26     hWnd=CreateWindow(szAppName,TEXT("RGB"),WS_OVERLAPPEDWINDOW,
27                       320,120,500,500,NULL,NULL,hInstance,NULL);
28
29     //
30     ShowWindow(hWnd,iCmdShow);
31     UpdateWindow(hWnd);
32     while(GetMessage(&msg,NULL,0,0)) {
33         TranslateMessage(&msg);
34         DispatchMessage(&msg);
35     }
36     return msg.wParam;
37 }
38 //
39 void Circle(HDC dc,int ox,int oy,int r)
40 {
41     Ellipse(dc,ox-r,oy-r,ox+r,oy+r);
42 }
43 //
44 LRESULT CALLBACK WndProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam)
45 {
46     //
47     HDC hdc,hMemDC;
48     HBITMAP hBitmap;
49     HBRUSH hbrush;
50     RECT rc= {0,0,500,500};
51     PAINTSTRUCT ps;
52     int ox=250,oy=210,r=100;
53     //
54     switch (message) {
55     case   WM_PAINT :
56         hdc=BeginPaint(hWnd,&ps);
57         //MemDC
58         hMemDC = CreateCompatibleDC(hdc);
59         hBitmap = CreateCompatibleBitmap(hdc,500,500);
60         SelectObject(hMemDC,hBitmap);
61         //ClearScreen with  Black
62         hbrush = CreateSolidBrush(RGB(0, 0, 0));
63         SelectObject(hMemDC,hbrush);
64         FillRect(hdc,&rc,hbrush);
65         //RED
66         hbrush = CreateSolidBrush(RGB(255, 0, 0));
67         SelectObject(hMemDC,hbrush);
68         //Ellipse(hMemDC,0+200,0+200+30,100+200,100+200+30);
69         Circle(hMemDC,ox,oy+0.8*r,r);
70         BitBlt(hdc,0,0,500,500,hMemDC,0,0,SRCPAINT);
71         //GREEN
72         hbrush = CreateSolidBrush(RGB(0, 255, 0));
73         SelectObject(hMemDC,hbrush);
74         //Ellipse(hMemDC,0+200-26,0+200-15,100+200-26,100+200-15);
75         Circle(hMemDC,ox-0.866*0.8*r,oy-0.5*0.8*r,r);
76         BitBlt(hdc,0,0,500,500,hMemDC,0,0,SRCPAINT);
77         //BLUE
78         hbrush = CreateSolidBrush(RGB(0, 0, 255));
79         SelectObject(hMemDC,hbrush);
80         //Ellipse(hMemDC,0+200+26,0+200-15,100+200+26,100+200-15);
81         Circle(hMemDC,ox+0.866*0.8*r,oy-0.5*0.8*r,r);
82         BitBlt(hdc,0,0,500,500,hMemDC,0,0,SRCPAINT);
83         //
84         DeleteObject(hBitmap);
85         DeleteDC( hMemDC );
86         EndPaint (hWnd, &ps) ;
87
88         break;
89     case WM_DESTROY :
90         PostQuitMessage(0);
91         break ;
92     }
93     return DefWindowProc (hWnd, message, wParam, lParam) ;
94 }
时间: 2024-10-10 10:22:27

Win32 RGB三原色的相关文章

LCD接口和RGB介绍

1. 介绍 Video的显示离不开LCD, 所以这里简单介绍一下LCD的接口和RGB LCD的全称是Liquid Crystal Display 的简称, 即液晶显示器LCD目前已经取代CRT, 成为TV.PC等的标配 RGB是 2. 接口类型 首先我们以传递的信号类型来区分主要有两大类:- 模拟信号:    - VGA: Video Graphics Array- 数字信号   - TTL: Transistor Transisor Logic   - LVDS: Low Voltage Di

RGB颜色传感器

RGB颜色传感器.传感器芯片不知道是TCS230,或是TCS3200.二者pinout及电气性能一样.左边的模块有8个引脚,LED常亮.S0, S1 默认上拉为高电平,/OE下拉低电平.S2, S3, OUT 三个引脚供单片机接口.如下: 照片中右边的模块有10个引脚,原理与8pin相同,只是多了一个LED控制引脚.默认LED点亮,接低电平熄灭: S2, S3选择颜色通道,如下表.OUT输出50% duty方波,方波频率与光强成比例,规格书给出的范围为 10-20kHz(周期50-100us):

Linux音视频(YUV图像数据格式)

摄像头图像数据的主流封装格式是JPEG/MJPG/YUV等,这些都是经过编码压缩的数据,大大减少了图像尺寸,方便传输和存储. 拓展: YUV是视频图像数据的主流格式,它根据人类眼睛的视觉特征设计--由于人类的眼睛对亮度的敏感度比颜色要高许多,而且在RGB三原色中对绿色有尤为敏感,利用这个原理,可以把色度信息减少一点,人眼也无法查觉这一点. YUV三个字母中,其中"Y"表示明亮度(Lumina nce或Luma),也就是灰阶值,而"U"和"V"表示

Css基础2

1.css选择符 选择符又称为选择器,定义了将影响文档中的哪些部分. -1.元素选择符 通配符:*{} 下面的例子(test.css) 匹配文档中所有的标签 *{ background-color: blue; } 一般情况下,我们会在html初始化的时候使用通配符,例子如下,将上和左边距都设为0 *{ padding: 0; margin: 0; } 类选择敷:.类名称{} 下面的例子,将p标签的内容变为绿色 1 index.html代码如下 2 <!DOCTYPE html> 3 <

html_note

一.简介 1.超文本标记语言(标记标签),描述网页 2.<head>包括咨讯信息:整个页面的属性.指导浏览器解析的标签.引入外部文件的标签 <body>需要展示的信息 3.大部分标签有属性,属性="属性值",多个属性之间用空格隔开 4.空标签 功能单一<br/> 5.html标签不区分大小写,建议使用小写 二.基本标签 1.文件标签(结构标签) <html>:根标签 <head>:<title>页面的标签 <

html和css知识总结

今天把整个html和css的总结了一遍.可能还有疏忽之处,共同学习吧 [行为样式三者分离] 不加行内css样式,不加行内js效果 [标签]1>单标签<!doctype html> 文档头,告诉浏览器这是一个网页br 换行img 插入图片,src属性 默认有图片上方3像素,间距 2>双标签body 主体,默认marginspandiv h1-h6 标题标签,默认字体加粗,间距,字体大小p 段落标签,默认有间距a 超链接,可添加width.height属性,如果给定的高度或者宽度比例不

很强大的HTML+CSS+JS面试题(附带答案)

一.单项选择(165题) 1.HTML是什么意思? A)高级文本语言 B)超文本标记语言 C)扩展标记语言 D)图形化标记语言 2.浏览器针对于HTML文档起到了什么作用? A)浏览器用于创建HTML文档 B)浏览器用于查看HTML文档 C)浏览器用于修改HTML文档 D)浏览器用于删除HTML文档 3.默认情况下,使用P标记会形成什么效果? A)在文字P所在位置中加入8个空格 B)P后面的文字会变成粗体 C)开始新的一行 D)P后面的文字会变成斜体 4.哪个标记用于表示HTML文档的结束? A

web前端基础篇⑧

1.伪类选择器 都以冒号开始.:focus 焦点的地方加样式:first-child 向元素的第一个子元素添加样式锚伪类:a:link {color:red} 未访问的链接 a:visited {color:yellow} 已访问的链接a:hover {color:green} 将鼠标放在链接上a:active {color:blue} 按住链接的时候hover必须放在link和visited后,才有效.active必须放在hover之后,才有效.2.伪元素选择器 也以冒号开始.:first-l

东大教务处验证码破解

东北大学教务处编的很烂,一点鼠标键,它就着急拉慌说:"不当的拷贝会损坏您的系统".东大教务处的验证码是最简单的那一种,形同虚设,很易破解. 一.东大教务处验证码特点概述 先上几张图片,. 字符集 a-zA-Z0-9共26+26+10=62个字符 字符位置 四种,如果四个字符一模一样,这四个字符之间的间距是固定的,即第一个与第二个,第二个与第三个,第三个与第四个之间的距离都是一样的. 字符形状 字符形状始终是一样的,不同位置的同一字符可以通过平移来生成. 上面这些规律可以通过大量获取验证