我现在想把picture控件表面的绘图结果保存下来,以位图的形式,即24比特的RGB格式,但不需要写成位图文件,只要将这个内存像素数据块复制到我的内存块中即可,请问该怎么做?
解决方案 »
- CImageList//Create函数的dx,dy参数什么意思?
- 学习使用vc2008IDE,但不知道怎么设置对话框的TabStop属性顺序
- SOCKET编程改错
- CFileDialog点确定后,对主窗口进行了哪些操作,只有打开点“确定”后以年程序才能用
- 有关串口通讯的问题,如何传输汉字,并把在接受的机器上解码,最好有例子
- 字符 转换为 数字 如何做?
- 请问如何得到当前目录?--谢谢!
- 各位大侠帮忙看看这个问题怎么解决,小弟苦了几天了!!!
- ***************** 线程问题 *******************
- 我想在程序里直接调用windows的拨号程序不知可否
- 怎么创建NUL.{00021401-0000-0000-C000-000000000046}文件夹
- socket server的问题
CBitmap::GetBitmap可以得到位图信息.
CDC * pDrawDC = NULL ;
CBitmap bmp1, bmp2;
CDC dcMemory ;
BYTE* bmpBuffer = NULL ;BITMAP bm;bkColor = GetSysColor(COLOR_BTNFACE) ;
BYTE rColor = GetRValue(bkColor) ;
BYTE gColor = GetGValue(bkColor) ;
BYTE bColor = GetBValue(bkColor) ;
if(! dcMemory.CreateCompatibleDC(&dc)) return ;
if(bmp1.LoadBitmap(IDB_ELEMENT_RECTANGLE))
{
BITMAP bm ;
bmp1.GetBitmap(&bm) ;
bmpBuffer=(BYTE*)GlobalAlloc(GPTR, bm.bmWidthBytes * bm.bmHeight);
DWORD dwValue=bmp1.GetBitmapBits(bm.bmWidthBytes * bm.bmHeight, Buffer);
int size = bm.bmWidthBytes * bm.bmHeight ;
TRACE("BITMAP1's size = %d\n", size) ;
for(int i=0; i<size; i+=4)
{
if(bmpBuffer[i] != 0) bmpBuffer[i] = bColor ;
if(bmpBuffer[i+1] != 0) bmpBuffer[i+1] = gColor ;
if(bmpBuffer[i+2] != 0) bmpBuffer[i+2] = rColor ;
}
...
GlobalFree((HGLOBAL)bmpBuffer);//Free memory
bmpBuffer = NULL ;
}