- 注册时间
- 2004-9-4
- 最后登录
- 1970-1-1
|
发表于 2006-10-6 21:58:59
|
显示全部楼层
再问问L,我想实现16灰的图像显示,用了以下代码,不过什么也看不到,而且要是把设置调色板的循环注释掉,会出现诡异的图像。
- static BITMAPINFO bmpInfo;
- static BYTE data[0x2000];
- static HBITMAP bitmap;
- static HDC hdcMem;
- switch (message)
- {
- case WM_CREATE:
- hdc = GetDC(hWnd);
- hdcMem = CreateCompatibleDC(hdc);
- bitmap = CreateCompatibleBitmap(hdcMem, 128, 128);
- SelectObject(hdcMem, bitmap);
- // 初始化BITMAPINFO的BITMAPINFOHEADER部分
- bmpInfo.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
- bmpInfo.bmiHeader.biWidth = 128;
- bmpInfo.bmiHeader.biHeight = 128;
- bmpInfo.bmiHeader.biPlanes = 1;
- bmpInfo.bmiHeader.biBitCount = 4;
- bmpInfo.bmiHeader.biCompression = BI_RGB;
- bmpInfo.bmiHeader.biSizeImage = 0;
- bmpInfo.bmiHeader.biXPelsPerMeter = 96;
- bmpInfo.bmiHeader.biYPelsPerMeter = 96;
- bmpInfo.bmiHeader.biClrUsed = 16;
- bmpInfo.bmiHeader.biClrImportant = 16;
- // 设置调色板
- for(int i = 0; i < 16; i++)
- {
- bmpInfo.bmiColors[i].rgbBlue = i * 0x11;
- bmpInfo.bmiColors[i].rgbGreen = i * 0x11;
- bmpInfo.bmiColors[i].rgbRed = i * 0x11;
- bmpInfo.bmiColors[i].rgbReserved= 0;
- }
- // 产生一些图像数据
- for(int i = 0; i < 0x2000; i++)
- {
- data[i] = i / 512;
- }
- // 转换
- SetDIBits(hdcMem, bitmap, 0, 128, data, &bmpInfo, DIB_PAL_COLORS);
- ReleaseDC(hWnd, hdc);
- break;
- case WM_PAINT:
- hdc = BeginPaint(hWnd, &ps);
- // TODO: 在此添加任意绘图代码...
- BitBlt(hdc, 10, 10, 128, 128, hdcMem, 0, 0, SRCCOPY);
- EndPaint(hWnd, &ps);
- break;
- ......
复制代码 |
|