Przycinanie obrazka PNG TPngImage

0

Witam ostatnio zaciekawiała mnie możliwość przycięcia pliku png przy użyciu TPngImage, jest tam procedura SetSize oraz Resize
dla testów napisałem sobie takie coś:

var
  PNG: TPngImage;
begin
  try
    PNG := TPngImage.Create;
    PNG.LoadFromFile(ExtractFilePath(Application.ExeName) + 'test.png');
    PNG.SetSize(PNG.Width div 2, PNG.Height div 2);
    PNG.SaveToFile(ExtractFilePath(Application.ExeName) + 'test2.png');
  finally
    PNG.Free;
  end;
end;

o dziwo pomniejszyło ładnie z zachowanie przezroczystości
user image
user image

postanowiłem spróbować przyciąć obrazek do takiej postaci:
user image

a wiec potrzeba przyciąć od góry od dołu od lewej i od prawej nie bardzo mam pojęcie jak to zrobić próbowałem tak:

var
  PNG, PNG2: TPngImage;
begin
  try
    PNG := TPngImage.Create;
    PNG.LoadFromFile(ExtractFilePath(Application.ExeName) + 'test.png');
    PNG2:=TPngImage.Create;
   // PNG2.LoadFromFile(ExtractFilePath(Application.ExeName) + 'test.png');

    PNG2.Draw(PNG.Canvas, Rect(5{Left},5{Top},15{Bottom},15{Right}));
    PNG2.SaveToFile(ExtractFilePath(Application.ExeName) + 'test2.png');
  finally
    PNG.Free;
    PNG.Free;
  end;
end;

oczywiście to nie działa bo tworzy pusty plik wiem że gdzieś popełniam błąd ale nie wiem gdzie, prosił bym o pomoc bądź jakąś podpowiedź lub jak w ewentualnie inny sposób przyciąć plik *.png
Pozdrawiam

0

Bardzo prosto

var M, N, I, J : Integer;
begin
M := 10; //Margines po Lewej i Prawej
N := 10; //Margines od Góry i Dołu
for I := 0 + M to Image1.Width - M - 1 do
  for J := 0 + N to Image1.Height - N - 1 do
    Image2.Canvas.Pixels[I - M, J - N] := Image1.Canvas.Pixels[I, J];
0

Nie działa przeźroczystość ;) przez ten czas napisałem/odpisałem swoją funkcję do przycinania jak ją skończę to opublikuje, mimo wszystko serdeczne dzięki za zainteresowanie :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1