在我的一个软件中,需要把画一些图形
如: 线条、图形等,如果是在对话框或者窗口上画是没有什么问题了,但问题是,现在不能画在窗口上,而要直接输出BMP文件中,这个怎么实现呢? 按理说是先画到内存DC上,再存到BMP文件中,但总是不成功。请高人们指点一二.
如: 线条、图形等,如果是在对话框或者窗口上画是没有什么问题了,但问题是,现在不能画在窗口上,而要直接输出BMP文件中,这个怎么实现呢? 按理说是先画到内存DC上,再存到BMP文件中,但总是不成功。请高人们指点一二.
解决方案 »
- 关于inet_ntoa的奇怪问题!
- atl中的settimer
- 怎样关闭消息窗口
- 为什么用类向导添加新类的时候总是提示我不能访问CPP,。H文件
- 【郁闷问题:】CListCtrl不会刷新
- 请教高手?如何使SDI程序同MDI一样?因为...
- 如何把一个大的文件分割?
- 大学应该掌握些什么~是理论还是实践
- 怎么样在C++接收'\n'然后跳出循环
- ?如何在VC中使用MSMQQueue和MSMQQueueInfo,在VB中可以用起来,我在win2000下用,按MSDN中写,把Mqoai.h和mqoa.lib加进去,但在VC却编译不能通过???请各位朋友帮忙,谢谢!!
- 闹鬼了,谁来看看这是不是ON_COMMAND_RANGE见鬼了?
- Edit控件有显示数据限制吗?如何修改?急!!!
{
HDC hMemDC = NULL;
int width = xx;
int height = yy;
int startX = 0;
int startY = 0; BYTE *lpBitmapBits = NULL;
hMemDC = CreateCompatibleDC( 0 ); BITMAPINFO RGB16BitsBITMAPINFO;
ZeroMemory(&RGB16BitsBITMAPINFO, sizeof(BITMAPINFO)); RGB16BitsBITMAPINFO.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
RGB16BitsBITMAPINFO.bmiHeader.biWidth = width;
RGB16BitsBITMAPINFO.bmiHeader.biHeight = height;
RGB16BitsBITMAPINFO.bmiHeader.biPlanes = 1;
RGB16BitsBITMAPINFO.bmiHeader.biBitCount = 16;
HBITMAP directBmp = CreateDIBSection(hMemDC, (BITMAPINFO*)&RGB16BitsBITMAPINFO,DIB_RGB_COLORS, (void **)&lpBitmapBits, NULL, 0);
HGDIOBJ previousObject = SelectObject(hMemDC, directBmp);
::MoveToEx( hMemDC,1,1, 0 );
::LineTo(hMemDC,100,100);
BITMAPFILEHEADER bmBITMAPFILEHEADER;
ZeroMemory(&bmBITMAPFILEHEADER, sizeof(BITMAPFILEHEADER)); bmBITMAPFILEHEADER.bfType = 0x4d42; //bmp
bmBITMAPFILEHEADER.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER);
bmBITMAPFILEHEADER.bfSize = bmBITMAPFILEHEADER.bfOffBits + ((width*height)*2); ///2=(16 / 8)
FILE *mStream = NULL;
if((mStream = fopen(file, "wb ")))
{
//write bitmap file header
fwrite(&bmBITMAPFILEHEADER, sizeof(BITMAPFILEHEADER), 1, mStream);
//write bitmap info
fwrite(&(RGB16BitsBITMAPINFO.bmiHeader), sizeof(BITMAPINFOHEADER), 1, mStream);
//write bitmap pixels data
fwrite(lpBitmapBits, 2*width*height, 1, mStream);
//close file
fclose(mStream);
}
else
{
return FALSE;
}
return TRUE;
}画出来的,却是黑呼呼的一篇...
::LineTo(hMemDC,100,100);选入的位图后DC默认是黑色的,所以画之前先设定背景颜色,比如设置为白色,这样才能看到画的效果
比如:
::FillRect(hMemDC,CRect(0,0,200,200),(HBRUSH)GetStockObject(WHITE_BRUSH));我把你的width和height都替换为200测试的,可以看到
放在 MoveTo,LineTo调用之前
你的pen是什么?是CPen类型也要直接传递pen,不是地址