我有一个图表(位图格式),我正在尝试使用StretchBlt
. 绘制到屏幕时,StretchBlt
工作正常。绘制到 CutePDF 打印机时,它返回 0,将最后一个错误设置为ERROR_INVALID_HANDLE
,并且仍然可以工作。绘制到 PDF995 打印机或物理 HP 打印机时,它返回 0,将最后一个错误设置为ERROR_INVALID_HANDLE
,并且无法绘制任何内容。
什么会导致StretchBlt
某些设备出现故障?我已经验证了源位图是一个 DIB 并且目标支持StretchBlt
通过调用GetDeviceCaps
.
这是我的代码,以防相关:(它是用 C++Builder 编写的,所以它使用 Delphi 的 VCL;TCanvas 包装了 HDC,TBitmap 包装了 HBITMAP。VCL 提供了自己的StretchDraw
函数,不支持 HALFTONE;我得到了同样的问题。)
void PrettyStretchDraw(TCanvas *dest, const TRect& rect, TGraphic *source)
{
if (dynamic_cast<Graphics::TBitmap*>(source) && !source->Transparent) {
POINT pt;
GetBrushOrgEx(dest->Handle, &pt);
SetStretchBltMode(dest->Handle, HALFTONE);
SetBrushOrgEx(dest->Handle, pt.x, pt.y, NULL);
StretchBlt(
dest->Handle,
rect.Left,
rect.Top,
rect.Width(),
rect.Height(),
dynamic_cast<Graphics::TBitmap*>(source)->Canvas->Handle,
0,
0,
source->Width,
source->Height,
SRCCOPY);
} else {
DrawItSomeOtherWay(dest, rect, source);
}
}