HBITMAP CreateBitmap(
int nWidth,
int nHeight,
BYTE nPlanes,//表示用于表示象素的位面的面数,它到底应该设成几?有什么说法?
//nPlanes设成3行不?
BYTE nBitCount,//这个参数表示什么?
LPSTR lpBits)
如果我假设存储的位面数一直是4,而且,如果一个象素是4位的(可以表示16种颜色),那应该是每个位面存储1位(0或1),那nBitCount是不是应该是1?(难道nBitCount表示的每个位平面上位数?),如果是这样,如果一个象素为8位的,位面数还设成4,那是不是说明每个位面上存储2位(2*4=8),也就是说nBitCount就是2了呢?
int nWidth,
int nHeight,
BYTE nPlanes,//表示用于表示象素的位面的面数,它到底应该设成几?有什么说法?
//nPlanes设成3行不?
BYTE nBitCount,//这个参数表示什么?
LPSTR lpBits)
如果我假设存储的位面数一直是4,而且,如果一个象素是4位的(可以表示16种颜色),那应该是每个位面存储1位(0或1),那nBitCount是不是应该是1?(难道nBitCount表示的每个位平面上位数?),如果是这样,如果一个象素为8位的,位面数还设成4,那是不是说明每个位面上存储2位(2*4=8),也就是说nBitCount就是2了呢?
解决方案 »
- 系统生成菜单栏//是不能活动的那种,代码里哪里是生产菜单呀?
- CListBox如何取消某一项高亮状态
- 非模式对话框销毁问题
- 对话框被拖放变形时,SDI的窗格比例显示问题
- 关于socket的问题:请问一段数据,用Send()一次传送与分N次传送在效率上的区别?
- 高分求 C++ Primer 电子书下载
- 跪求大家帮我看看这个图片预览的问题吧,确实很急!也不难
- 急急!
- NDIS 怎么获数HTTP数据
- 关于编译时的麻烦………………………………与大家讨论!!!!
- 谁能给一个ATL Composite Control的例子程序?
- 为什么我调用IWebBrowser2::get_HWND(LONG*)老是出错?
看看msdn吧
HBITMAP CreateBitmap(
int nWidth, // bitmap width, in pixels
int nHeight, // bitmap height, in pixels
UINT cPlanes, // number of color planes
UINT cBitsPerPel, // number of bits to identify color
CONST VOID *lpvBits // color data array
);
nPlanes在这里是cPlanes,翻译为“位面”,但至今未明白什么是“位面”。记得在MSDN里查同类函数的时候看到这个参数应该设置为1。
nBitCount在这里是cBitsPerPel,用来说明多少个二进制位描述一个像素点。
……
typedef struct tagBITMAPINFOHEADER{
DWORD biSize;
LONG biWidth;
LONG biHeight;
WORD biPlanes;
WORD biBitCount;
DWORD biCompression;
DWORD biSizeImage;
LONG biXPelsPerMeter;
LONG biYPelsPerMeter;
DWORD biClrUsed;
DWORD biClrImportant;
} BITMAPINFOHEADER, *PBITMAPINFOHEADER;
……
……
biPlanes
Specifies the number of planes for the target device. This value must be set to 1.
……供参考
我今天也一直在看位面这个概念,我在一本书上看到它表示的是显示缓冲区(显存)内存储位图的介质,如果位面的值不是n,那存储的介质是n个平行的位面,而每个位面上存储的应该是位图的实质内容(0、1颜色值),n个位面上的值组合在一起就形成了一个象素的真实颜色。
这本书说如果一个象素为4位的,那存储在4个位面上(红、绿、蓝、亮度),每个位面表示一位即可。
可我不明白的是如果我的象素颜色不是4位,如果是2位、32位(不知道是不是只能用4位表示)的时候,这个所谓的位面到底应该如何设置,我感觉CReateBitmap()参数上的那个nPlanes应该是指的我所说的这个位面。可谁真正明白呢??
如果对于DIB,colorplanes总是1,那什么时候不是1呀?
对于DIB(Device Independent Bitmap),color planes始终是1,这点应该很好理解。
对于DDB(Device Dependent Bitmap), color planes的值可以通过GetDeviceCaps函数获得。
而cBitPerPel既然写明了是表示每个像素点用的二进制位数,则显然与color planes无关了。个人体会:
color planes只是作为传递给GDI的一个参数,让GDI知道该如何去操纵显示设备,如何用RGB值去填充显示内存区域,至于具体如何操作,那就是API和硬件的工作了。
参数传递旨在让API按照程序员的意思去执行,则我们给它合适的参数就可以了。
标准VGA显示卡使用的是18位的颜色寄存器,因此它可以表示262144种颜色。然而,由于视频内存的限制,标准的VGA卡只能采用4位的颜色代码,。(摘自vc技术内幕)
我想知道什么是颜色寄存器,它与颜色码不是一个东西吗???那既然显存不支持那么多位(18位),那为什么还弄出个18位的寄存器?这不是徒劳吗?