przycinanie i pozycjonowanie bitmapy

0

Witam

Czy wie ktoś jak załadować do Image bitmape, która jest większa niż jego rozmiary, ale żeby bitmapa była przycinana i pozycjonowana wedle podanych parametrów?

PRZYKŁAD:

mam Image na formie wielkość 200 x 300, bitmapa ma 500 x 600. Teraz chcę, aby zostałą w nim umieszczona i wyświetlana pozycją np. 300 od gory i 300 od lewej. Po kliknięciu na coś (np. przycisk) uzyskany w ten sposób wycinek zapisywany jest do pliku.

Czy ktoś wie jak to się robi? Szczególnie zależy mi na ostatnim kroku (zapisanie wycinku do pliku). Będę naprawdę wdzięczny za wszelką pomoc.

0

ja bym to zzrobił tak:

var
bufor : TImage;

procedure wytnij_i_zapisz(filename : string; width, height : integer; picture_from_image : Timage);
begin
bufor := TImage.create(nil);
bufor.Parent := nil;
bufor.autosize := false;
bufor.strecht := false; *nie wiem czy się to tak pisze a mianowicie "strecht"
bufor.width :=width;
bufor.height := height;
bufor.picture := picture_from_image .picture; *chyba tak :) piszę z pamięci
bufor.picture.savetofile(filename);
bufor.free;
end;

//a eraz ty wpisujesz w np. onbuttonclick
wytnij_i_zapisz('C:\plik.bmp',200, 300, image1);

i chyba działa : ), pisałem z pamięci : ]

0

Dzięki, ale w ten sposob podajac np. 200, 300 uzyskam wycinek z bitmapy o wielkosci 200x300, ale zawsze bedzie to lewy, gorny rog bitmapy. Mi chodzi o cos wiecej - nie tylko utworzenie wycinka, ale takze o umiejscowienie go, ze np. bedzie on fragmentem z okolicy srodka duzej bitmapy...

0

A wiec cos takiego moze by pasowalo

  • to taka uniwersalna procedurka

  • X od jakiejgo X ciac

  • Y j/w ale dla Y

  • Szer szerokosc wycinka [np. Image1.Width]

  • Wys wysokosc wycinka [np. Image1.Height]
    procedure WytnijBmp(Skad: String;var Gdzie: TBitmap; X, Y, Szer, Wys: Integer);
    var
    Bmp: TBitmap;
    begin
    if FileExists(Skad) then
    begin
    Bmp:=TBitmap.Create;
    Bmp.LoadFromFile(Skad);
    Gdzie.Width:=Szer;
    Gdzie.Height:=Wys;
    Gdzie.Canvas.CopyRect(Rect(0,0,Szer,Wys),Bmp.Canvas,Rect(X,Y,Szer+X,Wys+Y));
    Bmp.Free;
    end;
    end;

  • teraz czasc wlasciwa musisz miec Image1: TImage, i Button1: TButton z podpietym eventem
    procedure TForm1.Buton1Click(Sender: TObject) *przykladowo
    var
    Bmp: TBitmap;
    begin
    Bmp:=TBitmap.Create;
    WytnijBmp('C:\JakisBmp.bmp',Bmp,300,300,Image1.Width,Image1.Height);

  • tu zapisuje wycinek do pliku
    Bmp.SaveToFile('C:\Wycinek_JakisBmp.bmp');
    // a tu laduje go i wyswietla na Image1
    Image1.Picture.LoadFromFile('C:\Wycinek_JakisBmp.bmp');
    Bmp.Free;
    end;
    --sys:> logout....

0

Dzieki. Jestes debeściak :).

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