位图杂谈

位图是矩形的,但在计算机内的存储是线性的,通常位图按列储存在内存中,且从顶列图素开始到底列结束,数据为偶数DIB是一个例外。
在16色位图中的颜色编码有时候称为IRGB(高亮红绿蓝:Intensity-Red-Green-Blue)。
GDI位图对象有时也称为设备相关位图。

颜色面:说不清

建立DDB
HBITMAP hBitmap;
// 第一种
hBitmap = CreateBitmap(cx,cy,cPlanes,cBitsPixel,bits);
// 第二种
hBitmap = CreateCompatibleBitmap (hdc, cx, cy) ;
// 第三种
hBitmap = CreateBitmapIndirect (&bitmap) ;
DeleteObject(hBitmap);
// 得到Bitmap
GetObject (hBitmap, sizeof (BITMAP), &bitmap) ;
// 设置内容
SetBitmapBits (hBitmap, cBytes, &bits) ;
基本规则是这样的:
不要用CreateBitmap,CreateBitmapIndirect和SetBitmapBits来创建,设置彩色的DDB位。你只能用这些来处理单色的DDB位。如果你能从其它相同设备里得到DDB位,那这个规则是个例外。

内存设备上下文
hdcMem = CreateCompatibleDC (hdc) ;
如果您将参数设为NULL,那么Windows将建立一个与视讯显示器相兼容的内存设备内容。应用程序建立的任何内存设备内容最终都通过呼叫DeleteDC来清除。
调用SelectObject来把位图写入到内存设备上下文中,不然,hdcMem里只有一个大小一个像素单色的块。
SelectObject (hdcMem, hBitmap) ;
内存设备上下文是唯一一个可以把BITMAP选进去的设备上下文。
DIB
DIB的文件格式
有以下四个部分:
    1.文件表头
    2.信息表头
    3.RGB色彩对照表(不一定有)
    4.位图图素位
内存中的DIB格式如下:
    1.信息表头
    2.RGB色彩对照表(不一定有)
    3.位图图素位
文件中的DIB和内存中的DIB除内存中的DIB没有文件头外,其它是一样的,内存中的DIB可以在WINDOWS的剪切板中用于交换。
文件头的格式:
DDB和DIB的区别
DDB没有颜色表,他使用的是设备上的调色板。
color palette

posted on 2007-12-06 19:40  夜渡寒潭  阅读(241)  评论(0)    收藏  举报

导航

百科全说 好好生活