如何在Bitmap中畫圖?(MFC)


直接在設備上下文DC中作圖;

void CGdiBitmapView::OnPaintBitmap() 
{
	// TODO: Add your command handler code here
    //取得DC設備
	CDC *pDC = GetDC();
    //保存DC狀態
	int nOldDC = pDC->SaveDC();
    //獲取客戶區大小
	RECT rect;
	GetClientRect(&rect);
    //創建與DC兼容的Bitmap
    m_pViewBitmap->CreateCompatibleBitmap(pDC, rect.right, rect.bottom);

    //選擇Bitmap到DC中
	pDC->SelectObject(m_pViewBitmap);
    //背景填充為紫紅色
	pDC->FillSolidRect(&rect, 333) ;

    //畫圖	
	POINT startPoint;
	startPoint.x = 0;
	startPoint.y = 0;

	POINT endPoint;
	endPoint.x = rect.right;
	endPoint.y = rect.bottom;

 	pDC->MoveTo(startPoint);
 	pDC->LineTo(endPoint);
    //釋放DC資源
 	pDC->RestoreDC(nOldDC);
	ReleaseDC(pDC);	
}

在內存DC中作完圖,拷貝到DC上(也就是雙緩存機制);

void CGdiBitmapView::OnPaintBitmap() 
{
    // TODO: Add your command handler code here
	//取得DC設備
	CDC *pDC = GetDC();
	//保存DC狀態
	int nOldDC = pDC->SaveDC();

	//創建內存DC
	CDC memDC;
	memDC.CreateCompatibleDC(pDC);
	int nOldMemDC = memDC.SaveDC();

	//取得客戶區大小
	RECT rect;
	GetClientRect(&rect);   
    //創建兼容Bitmap
	m_pViewBitmap->CreateCompatibleBitmap(pDC, rect.right, rect.bottom);

    //選擇Bitmap到內存DC,填充紫紅色背景
	memDC.SelectObject(m_pViewBitmap);
	memDC.FillSolidRect(&rect, 333) ;
	
	//畫圖
	POINT startPoint;
	startPoint.x = 0;
	startPoint.y = 0;

	POINT endPoint;
	endPoint.x = rect.right;
	endPoint.y = rect.bottom;

	memDC.MoveTo(startPoint);
	memDC.LineTo(endPoint);

	//拷貝內存DC到DC上
	pDC->BitBlt(0, 0, rect.right,rect.bottom, &memDC, 0, 0, SRCCOPY);

	//釋放內存DC資源
	memDC.RestoreDC(nOldMemDC);
	memDC.DeleteDC();
	//釋放DC資源
	pDC->RestoreDC(nOldDC);
	ReleaseDC(pDC);
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM