bmp文件的打印,奇怪了,打出来是空白

时间:2022-12-14 20:28:40
一个很简单的程序,从bmp图片文件读取(读了一个二维码的图片),然后print,但就是出来空白,啥也没有,真搞了。
代码如下:
var
bmp: TBitmap;
begin
bmp:=TBitmap.Create;
 bmp.LoadFromFile('a.bmp');
      if PrintDialog1.Execute then
    begin
    with Printer do
    begin
      BeginDoc;
      Canvas.Draw(100,100,bmp);
      Printer.EndDoc;
    end;
    end;
bmp.Free;
看看没问题啊,a.bmp是存在,并且跟项目在一个文件夹里面的。

13 个解决方案

#1


检查一下Canvas是不是Printer 的
或者再保存一下bmp到文件,看看文件是否也是空白

#2


检查一下Canvas是不是Printer 的
这句话怎么理解?

#3


Printer .Canvas.Draw(100,100,bmp);
这样写

#4


Canvas.stretchdraw(strect, bitmap.picture.graphic);

#5


     bmp.LoadFromFile('a.bmp');
      if PrintDialog1.Execute then
    begin
    Printer.BeginDoc;
    Printer.Canvas.Draw(100,100,bmp);
    Printer.EndDoc;
    end;
    bmp.SaveToFile('b.bmp');
这么写了,还是空白啊;
最后把bmp再导入图片,图片有图像的啊,咋回事。

#6


打印代码里 多加几个 字符串输出,看看它们是不是能打印出来
或者先把图片加载到Timage,再draw这个Timage1的内容

#7


打印图片,要有一个载体,传入打印机,才能打出来。

#8


定义的bmp算是载体了吧。

#9


如果加一下textout的话,就会把文本和二维码都打印出来了,啥原因呢?

#10


textout就是打印文本信息。

#11


我的印象这个问题从90年代以来一直有人在问,究其原因在于不同的绘制表面(GDI所谓的设备上下文,DC)所支持的点阵图形(windows中称之为光栅图,raster)绘制能力不一样,显示DC或者内存DC的支持能力最强,而打印机DC经常不支持BitBlt、StretchBlt(但是通常会支持DIB复制StretchDIBits),你需要用GetDeviceCaps确定一下你的打印机驱动所支持的DC绘制能力来决定使用哪个位图绘制函数。

#12


感谢楼上的大牛提供的思路,我尝试一下。
先结贴。
感谢大家。

#13


bmp文件保存后,打开是空白的,这是什么原因

#1


检查一下Canvas是不是Printer 的
或者再保存一下bmp到文件,看看文件是否也是空白

#2


检查一下Canvas是不是Printer 的
这句话怎么理解?

#3


Printer .Canvas.Draw(100,100,bmp);
这样写

#4


Canvas.stretchdraw(strect, bitmap.picture.graphic);

#5


     bmp.LoadFromFile('a.bmp');
      if PrintDialog1.Execute then
    begin
    Printer.BeginDoc;
    Printer.Canvas.Draw(100,100,bmp);
    Printer.EndDoc;
    end;
    bmp.SaveToFile('b.bmp');
这么写了,还是空白啊;
最后把bmp再导入图片,图片有图像的啊,咋回事。

#6


打印代码里 多加几个 字符串输出,看看它们是不是能打印出来
或者先把图片加载到Timage,再draw这个Timage1的内容

#7


打印图片,要有一个载体,传入打印机,才能打出来。

#8


定义的bmp算是载体了吧。

#9


如果加一下textout的话,就会把文本和二维码都打印出来了,啥原因呢?

#10


textout就是打印文本信息。

#11


我的印象这个问题从90年代以来一直有人在问,究其原因在于不同的绘制表面(GDI所谓的设备上下文,DC)所支持的点阵图形(windows中称之为光栅图,raster)绘制能力不一样,显示DC或者内存DC的支持能力最强,而打印机DC经常不支持BitBlt、StretchBlt(但是通常会支持DIB复制StretchDIBits),你需要用GetDeviceCaps确定一下你的打印机驱动所支持的DC绘制能力来决定使用哪个位图绘制函数。

#12


感谢楼上的大牛提供的思路,我尝试一下。
先结贴。
感谢大家。

#13


bmp文件保存后,打开是空白的,这是什么原因