SOS:VC++中有关图形打印的难题?

PeterLiu 2000-06-28 04:48:00
下面的代码在OnDraw(...)中被调用:

......在此之前有许多行代码用于画图.....
BITMAP BitMap;
CBitmap *pOldBitmap;
CDC dcImage;
m_TZBmp.GetBitmap(&BitMap);
if (!dcImage.CreateCompatibleDC(pDC))//Create MemDC
return;
pOldBitmap = dcImage.SelectObject(&m_TZBmp);

pDC->StretchBlt(Rect.left, Rect.top, Rect.Width(), Rect.Height(), &dcImage, 0, 0, BitMap.bmWidth, BitMap.bmHeight,SRCAND);

dcImage.SelectObject(pOldBitmap); //select old bitmap

该BMP图在屏幕上可以正常显示,但到了打印机上却无法被打印出来!!!!
其他的线条和文字都可以被正常打印出来!!!!


SOS!!!!!
...全文
156 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
evelan 2000-06-28
  • 打赏
  • 举报
回复
StretchBlt的前四个参数换成下面得到值即可,我以前碰到过此问题,要想图像不失真,你还要进行比例变换。我用宽度为基准换算。

nWidth = pdc->GetDeviceCaps(HORZRES); (宽度)
.......
舟中夜起 2000-06-28
  • 打赏
  • 举报
回复
你用BitBlt一般没有问题,至少我目前为止没有遇到任何问题,我建议你用此函数。
这是我在防闪烁的一种用法(OnPain函数中):
CRect rect;
GetClientRect(&rect);

CBitmap pBM; //Bitmap for drawing against flashing
CBitmap* pBMOld;
CDC* pDC = new CDC;

VERIFY(pDC);
VERIFY(pDC->CreateCompatibleDC(&dc));
pBM.CreateCompatibleBitmap(&dc, rect.Width(), rect.Height());
pBMOld = pDC->SelectObject(&pBM);
//////////////////////////////////////////////
//your code
//在此我有许多BMP操作,没有任何问题


////////////////////////////////////////////////
dc.BitBlt(0, 0, rect.Width(), rect.Height(), pDC, 0, 0, SRCCOPY);//copy bitmap to current DC
delete pDC;
pBM.DeleteObject();
PeterLiu 2000-06-28
  • 打赏
  • 举报
回复
Re: "StretChBlt有问题, 一般的显示设备是支持此函数的,但一般的打印机设备不支持,用此函数之前,最好用GetDeviceCaps查一下,我建议你用BitBlt试试,它支持的设备多一些,对于图象的扩张和压缩,最好自己用Bitmap搞:) "

注: 即使这样 还是无法打印!!!!怎样做到与设备无关地打印BMP图形!!!!
PeterLiu 2000-06-28
  • 打赏
  • 举报
回复
可能是StretchBlt的Draw mode没有设对,SRCAND应改为SRCCOPY-------
注: 即使这样 还是无法打印!!!!


舟中夜起 2000-06-28
  • 打赏
  • 举报
回复
StretChBlt有问题, 一般的显示设备是支持此函数的,但一般的打印机设备不支持,用此函数之前,最好用GetDeviceCaps查一下,我建议你用BitBlt试试,它支持的设备多一些,对于图象的扩张和压缩,最好自己用Bitmap搞:)
江王 2000-06-28
  • 打赏
  • 举报
回复
可能是StretchBlt的Draw mode没有设对,SRCAND应改为SRCCOPY
Dlf 2000-06-28
  • 打赏
  • 举报
回复
关注。
项目:JPEG图片压缩程序(1/5) 作者:zyl910 E-Mail:zyl910@sina.com 说明: 由于JPEG图片压缩的复杂性。就算是是最简单的基线系统(BaseLine), 若想一次实现对算法要求太高,且不易理解,再加上我对它不是特别熟悉。 于是我决定分5个步骤实现: 1.灰度 量化表:标准亮度量化表,共1张 Huffman表:标准DC/AC亮度Huffman表,共2张 2.彩色YUV111 量化表:标准亮度/色度量化表,共2张 Huffman表:标准DC/AC亮度Huffman表,共2张(亮度/色度用同一张Huffman表) 3.彩色YUV411 量化表:标准亮度/色度量化表,共2张 Huffman表:标准DC/AC亮度Huffman表,共2张(亮度/色度用同一张Huffman表) 4.使用DRI、RSTx标签 量化表:标准亮度/色度量化表,共2张 Huffman表:标准DC/AC亮度Huffman表,共2张(亮度/色度用同一张Huffman表) 5.自适应Huffman表 量化表:标准亮度/色度量化表,共2张 Huffman表:标准 亮度/色度 & DC/AC Huffman表,共4张 提示: JPEG压缩分为三个部分: 1.JPEG压缩原理及算法(RGB/YCbCr,DCT/IDCT,量化,Z字型编码,用DPCM对DC/用RLE对AC编码/Huffman编码) 2.JPEG标记格式 3.JPEG图片文件的组织形式(位于SOS后的图像压缩数据是由MCU块怎样排列的,特别是使用了DRI之后) 还有许多细节问题: 1.解码过程遇到“FF 00”当“FF”处理,否则忽略“FF” 2.进行DCT前YCbCr要减128,进行IDCT前要加128(相当于Y减128,YCbCr不需要加128) 3.每个标记数据可以不止一个(去掉长度的部分就是一段) 参考文献: 1.何斌《VC++数字图像处理》人民邮电出版社, 2001.4 2.张益贞《VC++实现JPEG/MPEG编解码技术》人民邮电出版社, 2002.11 3.杨淑莹《VC++图像处理程序设计》清华大学出版社/北方交通大学出版社, 2003.11(SOF0,宽度/高度 写反了)
项目:JPEG图片压缩程序 v2.0 更新:2004/5/23 -------------   这是一个比较完整的JPEG压缩程序,支持 彩色/灰度、Y分量水平/垂直采 样律、图像质量 调整。使用的是最简单的基线系统(BaseLine)压缩方式, 量化表及Huffman表都是与ACDSee一致的,没有提供自适应Huffman表压缩功能。 速度测试 ~~~~~~~~ CPU:赛杨733 内存:128MB SDRAM 操作系统:Windows 98 SE (请运行编译后的exe!在VB开发环境下是解析运行,大规模数据处理速度很慢) (单位:毫秒ms) ┏━━━━┳━━━━━━┯━━━━━┯━━━━━┓ ┃    ┃512*512 Lena│ 800*600 │ 1024*768 ┃ ┣━━━━╋━━━━━━┿━━━━━┿━━━━━┫ ┃ 灰度 ┃ 376.9725 │ 597.6534 │ 950.3084 ┃ ┠────╂──────┼─────┼─────┨ ┃彩色 1:1┃ 676.0799 │1097.7514 │1655.6605 ┃ ┠────╂──────┼─────┼─────┨ ┃彩色 2:1┃ 587.0741 │ 921.2441 │1384.4843 ┃ ┠────╂──────┼─────┼─────┨ ┃彩色 1:2┃ 574.2990 │ 905.8943 │1394.3513 ┃ ┠────╂──────┼─────┼─────┨ ┃彩色 2:2┃ 509.0129 │ 806.8808 │1251.1223 ┃ ┗━━━━┻━━━━━━┷━━━━━┷━━━━━┛ 注:   “彩色 x:y”表示Y分量的水平/垂直采样滤。     1:1:YUV 111     2:1:YUV 422(水平)     1:2:YUV 422(垂直)     2:2:YUV 411 提示 ~~~~ JPEG压缩分为三个部分: 1.JPEG压缩原理及算法(RGB/YCbCr,DCT/IDCT,量化,Z字型编码,用DPCM对DC/用RLE对AC编码/Huffman编码) 2.JPEG标记格式 3.JPEG图片文件的组织形式(位于SOS后的图像压缩数据是由MCU块怎样排列的,特别是使用了DRI之后) 细节问题 ~~~~~~~~ 1.解码过程遇到“FF 00”当“FF”处理,否则忽略“FF” 2.进行DCT前YCbCr要减128,进行IDCT前要加128(相当于Y减128,CbCr不需要加128) 3.每个标记数据可以不止一个(去掉长度的部分就是一段) 参考文献 ~~~~~~~~ 1.何斌《VC++数字图像处理》人民邮电出版社, 2001.4 2.张益贞《VC++实现JPEG/MPEG编解码技术》人民邮电出版社, 2002.11 3.杨淑莹《VC++图像处理程序设计》清华大学出版社/北方交通大学出版社, 2003.11(SOF0,宽度/高度 写反了) 4.网络上的一些文章,比如 云风的“JPEG 简易文档 V2.12”…… VB不适合编写高速JPEG压缩程序的原因 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1.JPEG压缩需要大量的位运算,而VB只能靠乘除来移位,效率太低了 2.在高级语言确定一个整数占用的位数需要一大堆if,可在汇编一条位扫描指令就行了 3.浮点DCT变换太慢,而 AAN快速DCT变换算法MMX优化版 早就公布n年了

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧