本人想做一个根据实时采集来的数据绘制曲线图的程序,然后将绘出的图形以位图的格式存盘。询问解决方法,或者第3方控件也成(类似于VB的PictureBox之类的——和VC比起来,VB真容易用啊),自知问题应该很好解决,但由于本人刚开始学习MFC,正处于迷茫加郁闷中,请高手指教,超级感激。
解决方案 »
- EndDialog出错,帮忙看看
- 兔子党赶快加油,不能让cpp2017得逞
- 关于硬件断点
- 双缓冲技术
- 要用socket连续发送数据,如何让socket每次发送的就是投递给它的数据,而不是从新组包后再发送?
- 怎么判断一个键按下的同时ctrl键是否按下???在线等待,解决立刻给分
- 谁知道哪里有VC6英文版下载???急用
- 关于NT服务程序读文件的问题?
- DELPHI分布式应用程序为何不能发布?
- :-)关注:如何定义控件的多层属性(就是两级以上的属性定义)??如控件a有属性b、c,属性b还有属性ID、NO等(语法:a.b.ID,a.b.NO,a.c.ID,a.c.NO依词类推)。
- 在程序中怎么样得到U盘的盘符200分
- 初学,,WDM驱动开发,难死了,,郁闷ing,有没有高手指点一下????
保存成位图也可以,先将曲线绘制到内存DC中,然后将内存DC中的位图取出就是CBitmap对象了。CBitmap对象保存成位图文件,可以在网上找一下。
memDC.CreateCompatibleDC(pDC);
CBitmap bmp;
bmp.CreateCompatibleBitmap(pDC,width,height);
CBitmap* pOldBmp = memDC.SelectObject(&bmp);
DrawCurve(&memDC);//你的绘制曲线函数
CBitmap *pMemBmp = memDC.SelectObject(pOldBmp);
pMemBmp就是画好的图像了
BOOL CMapView::SaveBitmapToFile(HBITMAP hBitmap , CString lpFileName)
{ HDC hDC;
int iBits;
WORD wBitCount;
DWORD dwPaletteSize=0,dwBmBitsSize,dwDIBSize, dwWritten;
BITMAP Bitmap;
BITMAPFILEHEADER bmfHdr;
BITMAPINFOHEADER bi;
LPBITMAPINFOHEADER lpbi;
HANDLE fh, hDib, hPal,hOldPal=NULL;
hDC = CreateDC("DISPLAY",NULL,NULL,NULL);
iBits = GetDeviceCaps(hDC, BITSPIXEL)*GetDeviceCaps(hDC, PLANES);
DeleteDC(hDC);
if (iBits <= 1)
wBitCount = 1;
else if (iBits <= 4)
wBitCount = 4;
else if (iBits <= 8)
wBitCount = 4;
else if (iBits <= 24)
wBitCount = 24;
else if (iBits <= 32)
wBitCount = 32;
if (wBitCount <= 8)
dwPaletteSize = (1 << wBitCount) *sizeof(RGBQUAD);
GetObject(hBitmap, sizeof(BITMAP), (LPSTR)&Bitmap);
bi.biSize = sizeof(BITMAPINFOHEADER);
bi.biWidth = Bitmap.bmWidth;
bi.biHeight = Bitmap.bmHeight;
bi.biPlanes = 1;
bi.biBitCount = wBitCount;
bi.biCompression = BI_RGB;
bi.biSizeImage = 0;
bi.biXPelsPerMeter = 0;
bi.biYPelsPerMeter = 0;
bi.biClrUsed = 0;
bi.biClrImportant = 0;
dwBmBitsSize = ((Bitmap.bmWidth *wBitCount+31)/32)* 4
*Bitmap.bmHeight ;
hDib =
GlobalAlloc(GHND,dwBmBitsSize+dwPaletteSize+sizeof(BITMAPINFOHEADER));
lpbi = (LPBITMAPINFOHEADER)GlobalLock(hDib);
*lpbi = bi;
hPal = GetStockObject(DEFAULT_PALETTE);
if (hPal)
{
hDC = ::GetDC(NULL);
hOldPal = SelectPalette(hDC, (HPALETTE)hPal, FALSE);
RealizePalette(hDC);
}
GetDIBits(hDC, hBitmap, 0, (UINT) Bitmap.bmHeight,
(LPSTR)lpbi + sizeof(BITMAPINFOHEADER)+dwPaletteSize,
(LPBITMAPINFO)lpbi, DIB_RGB_COLORS);
if (hOldPal)
{
SelectPalette(hDC, (HPALETTE)hOldPal, TRUE);
RealizePalette(hDC);
::ReleaseDC(NULL, hDC);
}
fh = CreateFile(lpFileName, GENERIC_WRITE,0, NULL, CREATE_ALWAYS,
FILE_ATTRIBUTE_NORMAL | FILE_FLAG_SEQUENTIAL_SCAN, NULL);
if (fh == INVALID_HANDLE_VALUE)
return FALSE;
bmfHdr.bfType = 0x4D42; // "BM"
dwDIBSize = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER)
+ dwPaletteSize + dwBmBitsSize;
bmfHdr.bfSize = dwDIBSize;
bmfHdr.bfReserved1 = 0;
bmfHdr.bfReserved2 = 0;
bmfHdr.bfOffBits = (DWORD)sizeof(BITMAPFILEHEADER)
+ (DWORD)sizeof(BITMAPINFOHEADER)
+ dwPaletteSize;
WriteFile(fh, (LPSTR)&bmfHdr, sizeof(BITMAPFILEHEADER), &dwWritten,
NULL);
WriteFile(fh, (LPSTR)lpbi, dwDIBSize,&dwWritten, NULL);
GlobalUnlock(hDib);
GlobalFree(hDib);
CloseHandle(fh);
return TRUE;}
http://bbs.njupt.edu.cn/cgi-bin/bbscon?board=CPP&file=M.1087698673.A&num=8838
相信你看了以后绝对会了。