EasyX图片处理
1.图片处理函数
1 | void Resize( |
参数
pImg
指定要调整尺寸的绘图设备。如果为 NULL,则表示默认绘图窗口。
width
指定绘图设备的宽度。
height
指定绘图设备的高度。
2.获取存储图片像素色彩地址
1 | DWORD* GetImageBuffer(IMAGE* pImg = NULL); |
参数
pImg
绘图设备指针。如果为 NULL,表示默认的绘图窗口。
返回值
返回绘图设备的显示缓冲区指针。
注意
获取到的显示缓冲区指针可以直接读写。
在显示缓冲区中,每个点占用 4 个字节,因此:显示缓冲区的大小 = 宽度 × 高度 × 4 (字节)。像素点在显示缓冲区中按照从左到右、从上向下的顺序依次排列。访问显示缓冲区请勿越界,否则会造成难以预料的后果。
显示缓冲区中的每个点对应 RGBTRIPLE
类型的结构体:
1 | struct RGBTRIPLE { |
RGBTRIPLE
在内存中的表示形式为:0xrrggbb
(bb
=蓝,gg
=绿,rr
=红),而常用的 COLORREF
在内存中的表示形式为:0xbbggrr
。注意,两者的红色和蓝色是相反的,请用 BGR
宏交换红色和蓝色。
如果操作绘图窗口的显示缓冲区,请在操作完毕后,执行 FlushBatchDraw()
使操作生效。
3.获取某个像素点位置的方法
1 | //分配图片内存 |
4.获取RGB
分量方法
方法一
1 | //操作显示缓冲区中的颜色 |
方法二
- 颜色在内存中的表示形式为:
0xbbggrr
(bb
=蓝,gg
=绿,rr
=红) - 但是显示缓冲区中的颜色表现形式为
0xrrggbb
。 - 注意,两者的红色和蓝色是相反的。直接操作显示缓冲区时,可以通过
BGR
宏交换颜色的红色和蓝色部分。
在C语言中,COLORREF
是一个常用的类型,主要用于表示颜色,特别是在 Windows API
中用于存储颜色值。
COLORREF
是一个32位的无符号整数,通常由三个字节组成,分别表示颜色的红色 (Red)、绿色 (Green)、蓝色 (Blue) 分量。
COLORREF
的结构如下:
1 | typedef DWORD COLORREF; |
它的每一部分通常是按以下顺序存储的:
- 高字节(
0x00FF0000
):蓝色 (Blue) - 中字节(
0x0000FF00
):绿色 (Green) - 低字节(
0x000000FF
):红色 (Red)
1 | BYTE GetRValue(COLORREF rgb); |
1 | //操作显示缓冲区中的颜色 |