如何正确打印BITMAP图,最好给个例子;
解决方案 »
- vs2010英文专业版问题
- 用什么软件能查看本机发送的HTTP的命令请求了,就是发送网页请求时,看GET命令的具体内容 求救 求救 求救 求救 求救 求救 求救 求救 求救 求救 求救 求救 求救 求救 求救 求救
- 请问VC++没有自带的函数 能实现重采样呢,比如原来每分钟采350个点,现在变成150个的?
- 新手求救VC对话框问题
- 求硬盘方面的资料,非常需要!
- 在CRichEditCtrl的插入图片动画问题(知道的高手请进)
- 如何把BSTR类型转换成熟悉的char*或是UCHAR*D的类型?在线等!
- 求教ACTIVEX控件编程的限制
- 想学HOOK,那位学过的高手给提供点资料?
- 如何在msflexgrid的cell中显示图象?
- 如何启动一个新线城?在线等待!谢谢!
- 关于CWnd的Atach()和Detach()
{
CScrollView::OnInitialUpdate();
CSize sizeTotal;
sizeTotal.cx = 800;
sizeTotal.cy = 1050;
CSize sizeLine = CSize(sizeTotal.cx / 100, sizeTotal.cy / 100);
SetScrollSizes(MM_LOENGLISH, sizeTotal, sizeTotal, sizeLine); BITMAP bm;
if(m_pMemDC->GetSafeHdc() == NULL){
CClientDC dc(this);
OnPrepareDC(&dc);
m_pBitmap->LoadBitmap(IDB_COMPUTER);
m_pMemDC->CreateCompatibleDC(&dc);
m_pMemDC->SelectObject(m_pBitmap);
m_pBitmap->GetObject(sizeof(bm),&bm);
m_szSource.cx = bm.bmWidth;
m_szSource.cy = bm.bmHeight;
m_szDest = m_szSource;
dc.DPtoLP(&m_szDest);
}}void CPrintBmpView::OnDraw(CDC* pDC)
{
CPrintBmpDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc); // TODO: add draw code for native data here
pDC->StretchBlt(100, -100, m_szDest.cx, -m_szDest.cy,
m_pMemDC, 0, 0, m_szSource.cx, m_szSource.cy, SRCCOPY);
}
void CView::OnPrint(CDC* pDC)
{
CDC dcComp;
CBitmap bitmap;
bitmap.LoadBitmap(IDB_BITMAP1);
dcComp.CreateCompatibleDC(pDC);
dcComp.SelectObject(&bitmap);
pDC->StretchBlt(x,y,31,55,&dcComp,0,0,13,23,SRCCOPY);
}
这样有问题,有错在哪里呢,如在Win98下实现需做哪些修改呢?
我在Win2000下开发的.EXE,在Win2000下打印没有问题,放在Win98下打印不出图形,不知为何;Win2000下实现程序如下:
void CView::OnPrint(CDC* pDC)
{
CDC dcComp;
CBitmap bitmap;
bitmap.LoadBitmap(IDB_BITMAP1);
dcComp.CreateCompatibleDC(pDC);
dcComp.SelectObject(&bitmap);
pDC->StretchBlt(x,y,31,55,&dcComp,0,0,13,23,SRCCOPY);
}
这样有问题?有错在哪里呢?如在Win98下实现需做哪些修改呢?
CRect m_printrect=pInfo->m_rectDraw;
CRect rectsrc(0,0,Bmp_Width,Bmp_Height);//得到位图的原始尺寸大小的矩形
int s_x=LINE_START_X*m_printrect.Width()/A4_PWIDTH;
int s_y=LINE_START_Y*m_printrect.Height()/A4_PHEIGHT;
int PrintPicWidth=min(Bmp_Width*6,4000)*m_printrect.Width()/A4_PWIDTH;
int PrintPicHeight=int(Bmp_Height*min(Bmp_Width*6,4000)/Bmp_Width)*m_printrect.Height()/A4_PHEIGHT;CRect rectdes(s_x,s_y,PrintPicWidth+s_x,PrintPicHeight+s_y);//得到目标的原始尺寸大小的矩形::PaintDIB(pDC->m_hDC,&rectdes,dib,&rectsrc,NULL);
看98下StretchBlt返回值是true还是false
CFile file;
CFileException fe;
file.Open(filepathname,CFile::modeRead|CFile::shareDenyWrite,&fe);
dib=ReadDIBFile(file);
LPSTR lpdib=(LPSTR)::GlobalLock((HGLOBAL)dib);
Bmp_Width=(int)::DIBWidth(lpdib);//图片宽度
Bmp_Height=(int)::DIBHeight(lpdib);//图片高度
::GlobalUnlock((HGLOBAL)dib);给我你的e-mail:我把DIB类给你
-----------------
MSDN
Not all devices support the BitBlt function. For more information, see the RC_BITBLT raster capability entry in the GetDeviceCaps function as well as the following functions: MaskBlt, PlgBlt, and StretchBlt.
-----------------
我使用 StretchDIBits() 打印图像的,没发现过什么问题。推荐 ^_^