В дополнение к рисованию GDI + на холсте управления с помощью TGPGraphics
(который работал нормально), я также пытаюсь нарисовать на TBitmap
с использованием GDI +, а затем отрисовать это растровое изображение на холсте управления,Тем не менее, на самом деле ничто не отображается.
Следующий код находится в обработчике сообщений WM_PAINT
, который снова работает для фактического холста элемента управления, но при создании эквивалентного объекта TGPGraphics
и передаче этого TBitmap
дескриптор, ничто не рисуется:
FBitmapCanvas:= CreateGPCanvas(FBitmap.Handle);
try
FBitmapCanvas.DrawLine(FSomePen, P1, P2); //Same pen used to successfully draw to control canvas
finally
FreeAndNil(FBitmapCanvas);
end;
Canvas.Draw(0, 0, FBitmap); //Draw this bitmap to control canvas
CreateGPCanvas выглядит так, и используется как для этого растрового изображения, так и для элемента управления:
function CreateGPCanvas(const DC: HDC): TGPGraphics;
begin
Result:= TGPGraphics.Create(DC);
Result.SetInterpolationMode(InterpolationMode.InterpolationModeHighQuality);
Result.SetSmoothingMode(SmoothingMode.SmoothingModeHighQuality);
Result.SetCompositingQuality(CompositingQuality.CompositingQualityHighQuality);
end;
С другой стороны, если я неПопытка использовать TGPGraphics
и вместо этого нарисовать линию непосредственно через свойство TBitmap.Canvas
, работает нормально (но, конечно, выглядит некрасиво, потому что это не GDI +). Итак, я знаю, что фактическое растровое изображение корректно отображается на холсте элемента управления.
FBitmap.Canvas.MoveTo(P1.X, P1.Y);
FBitmap.Canvas.LineTo(P2.X, P2.Y);
Что я здесь не так делаю и как заставить TGPGraphics
работать на этом растровом холсте?
PS - Единственная причина, по которой я вообще использую TBitmap
, заключается в том, что то, что я на самом деле пишу, должно «запомнить» часть того, что было нарисовано ранее, и сохранить ее, а не перекрашивать снова и снова.