1、用TDirect2DCanvas单次创建多次绘制,耗时比多次创建多次高精度绘制提高26倍,比VCL提高3倍。
##绘制2880*1800时#绘制BMP375毫秒,绘制精度0,###保存图片634毫秒 VCL
##绘制2880*1800时#绘制BMP3.0秒, 绘制精度1,###保存图片3.2秒 TDirect2DCanvas多次创建多次高精度绘制
##绘制2880*1800时#绘制BMP115毫秒,绘制精度1,###保存图片346毫秒 TDirect2DCanvas单次创建多次高精度绘制
##绘制2880*1800时TDirect2DCanvas单次创建多次高精度绘制耗时比多次创建多次高精度绘制提高26倍,比VCL提高3倍
2、用TDirect2DCanvas,画完后不显示,这时需要在EndDraw()后调用VCL的Canvas函数绘制一次,比如mCanvas->TextOut(-10, -10, "");。
3、追加:字体大小不能为0,Font->Size,LOGFONT lFont中的lFont.lfHeight都不能为0,程序中要判断。
下面是参考代码:
TCanvas *mCanvas = Image1->Picutre->Bitmap->Canvas;
Direct2d::TDirect2DCanvas *d2dCanvas;
d2dCanvas = new Direct2d::TDirect2DCanvas(mCanvas, mCanvas->ClipRect);
if (!d2dCanvas->Supported())
{
delete d2dCanvas;
d2dCanvas = NULL;
ShowMessage("操作系统不支持Direct2d");
return;
}
d2dCanvas->RenderTarget->SetAntialiasMode(D2D1_ANTIALIAS_MODE_PER_PRIMITIVE);
d2dCanvas->BeginDraw();
// 其他绘图函数
d2dCanvas->EndDraw();
delete d2dCanvas;
d2dCanvas = NULL;
// EndDraw()后必须调用VCL的Canvas函数绘制一次,否则TDirect2DCanvas的绘制结果不能在VCL的Canvas显示出来。一般情况下是这样的。
mCanvas->TextOut(-10, -10, "");