我有一个图表(位图格式),我正试图用
StretchBlt
. 当绘制到屏幕上时,
拉伸切片机
工作良好。当绘制到CutePdf打印机时,它返回0,将最后一个错误设置为
ERROR_INVALID_HANDLE
不管怎样都可以。当绘制到PDF995打印机或物理HP打印机时,它返回0,将上一个错误设置为
错误\无效\句柄
没有画出任何东西。
会导致什么
拉伸切片机
某些设备出现故障?我已经验证了源位图是DIB,并且目标支持
拉伸切片机
通过呼叫
GetDeviceCaps
.
这是我的代码,如果它是相关的:(它是用C++Builder编写的,所以它使用Delphi的VCL;TCANVAS包装一个HDC,并且TBITMAP封装了一个HbM映像。VCL提供自己的
StretchDraw
不支持半色调的功能;我也遇到同样的问题。)
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);
}
}