My project is small bitmap font editor, I am adding new control to edit small png transparent image with alpha pixles.
Drawing pixels started being slow at size > 64, with scaling it 10 times
here the part of code of painting it
var
Img: TBitmap;
fpimage: TLazIntfImage;
begin
if IsChanged then
begin
IsChanged := False;
if (PaintTool <> nil) and not (ptsDirect in PaintTool.Style) then
begin
ScrachImage.CopyPixels(FImage);
PaintTool.Paint(FScrachCanvas);
fpimage := ScrachImage;
end
else
fpimage := Image;
ScaledImage.CopyPixels(BackgroundImage);
ScaledCanvas.DrawingMode := dmAlphaBlend;
//ScaledCanvas.Interpolation := TFPBoxInterpolation.Create; moved to after create ScaledCanvas
ScaledCanvas.StretchDraw(0, 0, ScaledImage.Width, ScaledImage.Height, fpimage);
end;
Img := TBitmap.Create;
try
Img.LoadFromIntfImage(ScaledImage);
vCanvas.Draw(0, 0, Img);
finally
Img.Free;
end;
end;
and images created here
FImage := TLazIntfImage.Create(cDefaultWidth, cDefaultHeight, [riqfRGB, riqfAlpha]);
FCanvas := TFPImageCanvas.Create(FImage);
FDrawer := TIntfFreeTypeDrawer.Create(FImage);
FFont := TFreeTypeFont.Create;
FFont.Name := 'c:\Windows\fonts\Arial.ttf';
FFont.SizeInPixels := 9;
FFont.Hinted := False;
FFont.ClearType := False;
FFont.Quality := grqLowQuality;
FScrachImage := TLazIntfImage.CreateCompatible(FImage, cDefaultWidth, cDefaultHeight);
FScrachCanvas := TFPImageCanvas.Create(FScrachImage);
ScaledImage := TLazIntfImage.CreateCompatible(ScrachImage, ScrachImage.Width * DotSize, ScrachImage.Height * DotSize);
ScaledCanvas := TFPImageCanvas.Create(ScaledImage);
ScaledCanvas.Interpolation := TFPBoxInterpolation.Create;
BackgroundImage := TLazIntfImage.CreateCompatible(ScrachImage, ScrachImage.Width * DotSize, ScrachImage.Height * DotSize);
BackgroundCanvas := TFPImageCanvas.Create(BackgroundImage);
FHistory := TntvHistory.Create;
SetSize(cDefaultWidth, cDefaultHeight);
my project is opensource
https://github.com/parmaja/minictrls/blob/master/native/ntvPixelGrids.pas#L612Where is my fault, or Is there any way to make it faster painting or generating scaled image?