如何正确打印BITMAP图,最好给个例子;

解决方案 »

  1.   

    在OnDraw()中如何显示的bmp图,就在OnPrint()中如何显示,自然就会送往打印机。
      

  2.   

    void CPrintBmpView::OnInitialUpdate()
    {
    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);
    }
      

  3.   

    我在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下实现需做哪些修改呢?
      

  4.   

    是不是全是图象区域全是黑色得啊,我也遇过这种问题。我后来没有把位图引入兼容设备,而是直接bit到pDC里面就可以了,你也可以试试。
      

  5.   

    不是,而是直接打印不出BITMAP图形,请高手多多指教
    我在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下实现需做哪些修改呢?
      

  6.   

    是在繁体Win98下位图打印不出,而在简体Win98下,打印的位图区域全是黑色,请问如何修改,明明请你说详细一点好吗?请各位高手指教?
      

  7.   

    下面是打印位图的一个例子。其中PaintDIB是我加载的一个DIB类
    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);
      

  8.   

    你加断点调试一下
    看98下StretchBlt返回值是true还是false
      

  9.   

    在打开图片函数中加载位图:
    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类给你
      

  10.   

    明明我的e-mail:[email protected]谢谢你!!
      

  11.   

    明明给我也一份,[email protected]
      

  12.   

    CDC::StretchBlt() & CDC::BitBlt() 在某些情况下会打印出一片黑图
    -----------------
    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() 打印图像的,没发现过什么问题。推荐 ^_^
      

  13.   

    gboy(hello) 给个StretchDIBits() 打印图像的例子好吗,谢谢!!