请问全志R329 MiniGUI如何获取和设置BITMAP像素点?
本回答来源全志R329 MiniGUI如何获取和设置BITMAP像素点?
需要一个结构体来存RGBA数据
typedef struct tagRGBQUAD {
BYTE rgbBlue;
BYTE rgbGreen;
BYTE rgbRed;
BYTE rgbReserved;
} RGBQUAD;
下面是获取像素的方法
static void getPixel(PBITMAP src) {
RGBQUAD srcdib[src->bmWidth * src->bmHeight];
int x, y, point = 0;
Uint8 *srcrow;
Uint32 pixel;
/* 循环获取像素点 */
for (y = 0; y < src->bmHeight; y++) {
for (x = 0; x < src->bmWidth; x++) {
/* 得到像素点的地址 */
srcrow = (Uint8 *) src->bmBits + y * src->bmPitch
+ x * src->bmBytesPerPixel;
pixel = *((Uint32 *) (srcrow));
/* 这是MiniGUI中根据Pixel转成RGBA的函数 */
Pixel2RGBA(HDC_SCREEN, pixel, &srcdib[point].rgbRed,
&srcdib[point].rgbGreen, &srcdib[point].rgbBlue,
&srcdib[point].rgbReserved);
/* 打印看看对不对 */
printf("%d %d %d %d\n", srcdib[point].rgbReserved,
srcdib[point].rgbRed, srcdib[point].rgbGreen,
srcdib[point].rgbBlue);
/* 记录点的位置 */
point++;
}
}
}
下面是设置像素的方法
static void setPixel(PBITMAP src, PBITMAP dstbmp) {
/* 这里根据源图片重新构造一个PBITMAP对象 */
dstbmp->bmType = src->bmType;
dstbmp->bmBitsPerPixel = src->bmBitsPerPixel;
dstbmp->bmBytesPerPixel = src->bmBytesPerPixel;
dstbmp->bmAlpha = src->bmAlpha;
dstbmp->bmColorKey = src->bmColorKey;
#ifdef _FOR_MONOBITMAP
dstbmp->bmColorRep = src->bmColorRep;
#endif
dstbmp->bmAlphaMask = src->bmAlphaMask;
dstbmp->bmAlphaPitch = src->bmAlphaPitch;
dstbmp->bmWidth = src->bmWidth;
dstbmp->bmHeight = src->bmHeight;