![]() |
Bildbereich ausschneiden
Hi,
ich versuche seit Tagen aus einem Bitmap, das in einer variable TBitmap liegt einen Bildbereich auszuschneiden, und diesen in der selben Variable wieder darzustellen. Quasi das Bild auf den Bereich verkleinen. Habe dazu den copyrect befehl benutzt, nur klappt das einfach nicht. bekomme nur das ausgeschnittene bild in einer paintbox angezeigt. Hoffenltich kann mir jemand einen tipp geben. |
Re: Bildbereich ausschneiden
mach es doch inetwa so
Delphi-Quellcode:
temp_bitmap.copyrect(rect(0,0,100,100),orginalbitmap,rect(200,200,300,300));
orginalbitmap:=temp_bitmap; |
Re: Bildbereich ausschneiden
so hab ich es auch probiert, klappt einfach net.
gibt es denn keine alternative oder einfach ein anderer befehl? |
Re: Bildbereich ausschneiden
Was heißt "klappt nicht"? Und das it der richtige Weg, du wirst nur etwas falsch machen.
|
Re: Bildbereich ausschneiden
probier doch mal einzelnes auslesen der Pixel! mit
Delphi-Quellcode:
um die dann inner Image wiederhinzumalen
Canvas.Pixels[x, y];
Delphi-Quellcode:
Canvas.Pixels[x, y] := TColor;
|
Re: Bildbereich ausschneiden
@wursthunter
Arg viel unperformanter gehts schon kaum nichtmehr ;) air |
Re: Bildbereich ausschneiden
Hi, ich muss wieder auf das Thema zurückkommen.
ich bin jetzt seit stunden dran, einen bereich mitten aus einem image in eine andere bitmap variable zu legen, aber es klappt einfach nicht. hab es mit copyrect und der schleifenvariante mit pixels[x,y] versucht.
Code:
und noch die andere variante:
procedure TMainForm.Button4Click(Sender: TObject);
var farbe : tcolor; a,b: integer; bild2: tbitmap; begin bild2 := tbitmap.Create; for a := 0 to 60 do begin for b := 0 to 60 do begin farbe:= videoimage.Canvas.Pixels[a,b]; bild2.Canvas.Pixels[a,b] := farbe; end; end; paintbox2.Canvas.Draw(0,0,bild2); end;
Code:
bei der zweiten variante kommt auch kein richtiger bildbereich raus. er holt mir da zwar den bildbereich,
{ Bild zerlegen }
splitter:=tbitmap.create; splitter.width:=60; splitter.height:=videoimage.Height; splitter.canvas.copyrect(rect(0,0,10,videoimage.Height),videoimage.canvas,rect(20,20,30,videoimage.Height)); videoimage := splitter; macht aber darum alles weiß. ich verzweifele... :-( :wall: |
Re: Bildbereich ausschneiden
nimm dazu am besten BitBlt, das kümmert sich selbst darum das alles klappt wenn source und dest gleich sind.
|
Re: Bildbereich ausschneiden
Zitat:
Du must danach in Deinem Ziel Image nur noch strecken einstellen... Frank :coder: |
Re: Bildbereich ausschneiden
Leider weiß ich nicht wie ich BitBlt zum laufen bekomme
|
Re: Bildbereich ausschneiden
Hallo,
es sollte auch mit CopyRect ohne temporäre Bitmap funktionieren:
Delphi-Quellcode:
Gruß Hawkeye
procedure TForm.CutImage;
var lBMP : TBitmap; begin // Bitmap erzeugen lBMP := TBitmap.Create; try // Originalbild laden lBMP.LoadFromFile('C:\WINDOWS\Kaffeetasse.bmp'); // Mittleren Teil nach (0,0) kopieren lBMP.Canvas.CopyRect(Rect(0, 0, 64, 64), lBMP.Canvas, Rect(32, 32, 96, 96)); // Bild auf die gewünschte Zielgröße beschneiden lBMP.Width := 64; lBMP.Height := 64; // Bild speichern lBMP.SaveToFile ('E:\Tasse.bmp'); finally // Bitmap freigeben lBMP.Free; end; end; |
Re: Bildbereich ausschneiden
ok, erst mal danke für eure Hilfestellungen!
...Nun hab ich ein weiteres Problem, ich möchte 2 bildbereiche (2 senkrechte streifen) aus einem bild ausschneiden, und die in einer neuen bitmap variable als 1 bild zusammensetzen. |
Re: Bildbereich ausschneiden
Geht doch genauso. Wenn du das bisherige verstanden hast, sollte es kein Problem sein es umzusetzen.
|
Re: Bildbereich ausschneiden
hier mein code, er setzt die zwei bilder nicht in dem bitmap objekt videoimage zusammen.
Delphi-Quellcode:
SourceBitmap := videoimage;
TargetBitmap.Width := 30; TargetBitmap.Height:= 150; TargetBitmap2.Width := 30; TargetBitmap2.Height:= 150; // Ausschneiden des ersten Bildbereichs BitBlt(TargetBitmap.Canvas.Handle,0,0,30,150, SourceBitmap.Canvas.Handle, 330, 300, SRCCOPY); // Originalbild neu laden sourcebitmap := videoimage; //Ausschneiden des zweiten Bildbereichs BitBlt(TargetBitmap2.Canvas.Handle,0,0,30,150, SourceBitmap.Canvas.Handle, 360, 300, SRCCOPY); // Zur Überprüfung beide Objekte darstellen paintbox1.Canvas.Draw(0,0,TargetBitmap); paintbox2.Canvas.Draw(0,0,TargetBitmap2); //Beide Objekte zu einem Bitmapobjekt zusammensetzen for y := 0 to 150 do begin for x := 0 to 29 do begin videoimage.Canvas.Pixels[x,y] := TargetBitmap.Canvas.Pixels[x,y]; end; for x := 31 to 59 do begin videoimage.Canvas.Pixels[x,y] := TargetBitmap2.Canvas.Pixels[x,y]; end; end; videoimage.Width := 62; videoimage.Height:= 150; |
Re: Bildbereich ausschneiden
ok, stop, hat sich erledigt. hab mein problem gelöst.
|
Re: Bildbereich ausschneiden
hier noch der code
Delphi-Quellcode:
BitBlt(videoimage.Canvas.Handle,0,0,29,150, SourceBitmap.Canvas.Handle, 330, 300, SRCCOPY);
BitBlt(videoimage.Canvas.Handle,31,0,60,150, SourceBitmap.Canvas.Handle, 430, 300, SRCCOPY); |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:10 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz