怎样设置CreateBitmap里的hBitmap和*lpvBits参数(100分)

  • 主题发起人 主题发起人 NewShell
  • 开始时间 开始时间
N

NewShell

Unregistered / Unconfirmed
GUEST, unregistred user!
如题,谢谢
 
你说的是WIn API吗?

只有lpvbits,没有hBitmap呀?

在api中,lpvbits是你的图象具体存放位置的指针(图象真正的信息)

返回的才是hBitmap
 
如此就行了:
bmAndBack := CreateBitmap (ptSize.x, ptSize.y, 1, 1, nil);

 
CBitmap::CreateBitmap
BOOL CreateBitmap( int nWidth, int nHeight, UINT nPlanes, UINT nBitcount, const void* lpBits );

Return Value

Nonzero if successful; otherwise 0.

Parameters

nWidth

Specifies the width (in pixels) of the bitmap.

nHeight

Specifies the height (in pixels) of the bitmap.

nPlanes

Specifies the number of color planes in the bitmap.

nBitcount

Specifies the number of color bits per display pixel.

lpBits

Points to a short-integer array that contains the initial bitmap bit values. If it is NULL, the new bitmap is left uninitialized.

Remarks

Initializes a device-dependent memory bitmap that has the specified width, height, and bit pattern.

For a color bitmap, either the nPlanes or nBitcount parameter should be set to 1. If both of these parameters are set to 1, CreateBitmap creates a monochrome bitmap.

Although a bitmap cannot be directly selected for a display device, it can be selected as the current bitmap for a “memory device context” by using CDC::SelectObject and copied to any compatible device context by using the CDC::BitBlt function.

When you finish with the CBitmap object created by the CreateBitmap function, first select the bitmap out of the device context, then delete the CBitmap object.

For more information, see the description of the bmBits field in the BITMAP structure. The BITMAP structure is described under the CBitmap::CreateBitmapIndirect member function.

CBitmap Overview | Class Members | Hierarchy Chart

See Also CDC::SelectObject, CGdiObject::DeleteObject, CDC::BitBlt,::CreateBitmap
 
忘了说明:
bmAndBack:HBITMAP;
 
关键是lpvBits指向的内存区域(包含图象真正的信息)里的图象信息是什么结构的
是和用流把图象导入到buffer里的结构一样的吗,这个区域的信息怎么可以读出来
比如能不能读入到流里或者位图控件里显示,谢谢
 
它的格式是这样的:(以24位位图为例)

假定为 4*4 大小的位图
0 1 2 3
3 R G B R G B R G B R G B
2 R G B R G B R G B R G B
1 R G B R G B R G B R G B
0 R G B R G B R G B R G B

其中R,G,B均是一字节大小

怎么用,是你自己的事情
 
它的结构应该是这样的:
windows 从伟图的坐下娇开始(即从左到右从下到上)琢行扫描位图!将位图的像素值一一记录下来
这些记录像素值的字节组成了位图阵列!当是24位位图的时候,为图阵列的每3个字节代表
一个像素,3个字节直接定义了像素颜色中blue,green,red的相对亮度!
 
1. 对于Windows来说,RGB24的位图是BGR格式,而不是RGB格式所以,
4x4的位图(高度为正时)该是:

0 1 2 3
3 B G R B G R B G R B G R
2 B G R B G R B G R B G R
1 B G R B G R B G R B G R
0 B G R B G R B G R B G R

2. Windows规定, 如果位图的高度是正,则位图是自下而上的,如上。
如果高度为负,则位图是正常的自下而上的格式,与上相反。

3. Windows GDI还要求将每行的字节数对齐到4字节,
如1x2的位图(高度用正):

0
1 B G R F
0 B G R F

其中F为填充字节。

具体细节见Win32SDK和VC的例子。
 
多人接受答案了。
 
后退
顶部