none
使用gdi的StretchDIBits打印图片,为什么某些打印机无法正常输出? RRS feed

  • 问题

  • int nRet = SetGraphicsMode(hdc_, GM_ADVANCED);
    if (!nRet)
    {
    	return false;
    }
    
    bSet = SetWorldTransform(hdc_, &_xForm);
    if (!bSet)
    {
    	return false;
    }
    
    nRet = SetStretchBltMode(hdc_, STRETCH_HALFTONE);
    if (!nRet)
    {
    	return false;
    }
    
    BITMAPINFO bmi;
    memset(&bmi, 0, sizeof(BITMAPINFO));
    memcpy(&bmi.bmiHeader,cell->data,sizeof(bmi.bmiHeader));
    
    if (nRet) 
    	StretchDIBits(hdc_,
    		0, 0, nWidth, nHeight,
    		0, 0, cell->width, cell->height,
    		cell->data+sizeof(BITMAPINFOHEADER), &bmi, DIB_RGB_COLORS, SRCCOPY);
    else 
    	StretchDIBits(hdc_,
    		edges[3].x, edges[3].y, nWidth, nHeight,
    		0, 0, cell->width, cell->height,
    		cell->data+sizeof(BITMAPINFOHEADER), &bmi, DIB_RGB_COLORS, SRCCOPY);
    
    ModifyWorldTransform(hdc_, &_xForm, MWT_IDENTITY);
    SetGraphicsMode(hdc_, GM_COMPATIBLE);

    这是主要的代码

    现在这些代码放在一个打印线程中

    (1)大部分打印机可以正常打印出图片;

    (2)有些打印机不行,但是如果不创建打印线程,而是直接在主线程中执行这些代码,则也可以正常打印出来;

    问题出在哪里呢?

    2019年12月6日 3:56

全部回复