![]() |
Bitmap Ränder entfernen
Hallo,
ich habe ein Bitmap, wo ich die Ränder gerne entfernen möcht. Wie kann ich das machen? Ich habe vier Variablen Left, Top, Right, Bottom : Integer; Ich denke der rest erklärt sich von alleine. Left soll den linken Rand wegschneiden top oben, right rechts und bottom unten. Wie kann man das machen? LG Chris |
Re: Bitmap Ränder entfernen
TBitmap hat eine Canvas und diese hat die Methode CopyRect.
Schau mal in der Hilfe nach, wie CopyRect zu verwenden ist. |
Re: Bitmap Ränder entfernen
Hallo,
ich habe das mal probiert.
Delphi-Quellcode:
Anschließend speichere ich das Bitmap in einer datei. Wenn ich das bild öffe, ist alles einfach nur weiss.
Bitmap.Canvas.CopyRect(Rect(VLeft, VTop, VRight, VBottom), Canvas, Screen.DesktopRect);
Was habe ich falsch gemacht??? |
Re: Bitmap Ränder entfernen
Okay, also folgendes:
Dest ist das Ziel-Rechteck. Am besten nimmst du dir ein neues Bitmap (neues erstellen, Width und Height musst du entsprechend anpassen). Das Recteck für Dest sieht dann so aus: Rect(0, 0, neuesBitmap.Width, neuesBitmap.Height); Canvas ist die Canvas von deinem Quell-Bitmap, also altesBitmap.Canvas; Source ist das Quell-Rechteck: Rect(VLeft, VTop, ....); für den rechten und unteren Rand musst du selbst überlegen: Was ist VRight und VBottom? Sind das die rechte bzw. untere Grenze als Gesamtzahl oder nur der Abstand (also zB dein Bitmap ist 100 Pixel hoch und du willst unten 5 Pixel abschneiden: hat VBottom dann den Wert 5 oder 95 ?) Für das Rect() benötigst du, da wo ich .... geschrieben habe letzteres, also in dem Fall die 95. ggf. musst du dir diese Zahl dann selbst aus Width bzw. Height des alten Bitmaps berechnen. Hoffe ich konnte dir helfen... //Nachtrag: Du brauchst nicht unbedingt ein neues Bitmap zu erstellen. Für das Dest-Rechteck musst du nur die neue Breite und Höhe berechnen und diese dann übergeben. Zum Schluss setzt du dann Bitmap.Width und Bitmap.Height einfach auf die neue Breite/Höhe :wink: |
Re: Bitmap Ränder entfernen
Hallo,
irgendwie klappt das alles nicht wie ich will. links und oben schneidet er es jetzt ab, aber unten und rechts noch nicht. hat jemand mal ein beispiel???
Delphi-Quellcode:
Bitmap.Width := Screen.DesktopWidth - (VLeft + VRight);
Bitmap.Height:= Screen.DesktopHeight - (VTop + VBottom); Bitmap.Canvas.CopyRect(Rect(0 - VLeft, 0 - VTop, Bitmap.Width - VLeft + VRight, Bitmap.Height - VTop + VBottom), Canvas, Screen.DesktopRect); |
Re: Bitmap Ränder entfernen
Also irgendwie weiß ich überhaupt nicht was du vor hast, vielleicht verrätst du uns das mal.
Ich dachte, du hast ein Bitmap und willst davon die Ränder abschneiden (wie das geht, hab ich im Beitrag oben schon geschrieben), aber was du hier plötzlich mit Screen.Desktop willst?!? Wenn du einfach nur Canvas schreibst als Quelle, dann ist das deine Form, also willst du die Form in ein Bitmap kopieren und da was abschneiden? Aber was willst du dann mit Screen.DesktopRect? Ist deine Form über den ganzen Desktop? Tut mir leid, aber genaue Fragestellung würde hier eher weiter helfen. Von was genau willst du denn was abschneiden? Übrigens um zur ursprünglichen Frage zurück zu kehren, also dass du ein Bitmap hast und davon VLeft, VTop, VRight und VBottom abschneiden willst, das geht so:
Delphi-Quellcode:
Hättest du dir meinen Beitrag weiter oben durchgelesen, wärst du schnell auch auf diesen Code gekommen.
var NewWidth, NewHeight: Integer;
{...} NewWidth := Bitmap.Width - VLeft - VRight; NewHeight := Bitmap.Height - VTop - VBottom; Bitmap.Canvas.CopyRect(Rect(0, 0, NewWidth, NewHeight), Bitmap.Canvas, Rect(VLeft, VTop, Bitmap.Width-VRight, Bitmap.Height-VBottom)); Bitmap.Width := NewWidth; Bitmap.Height := NewHeight; Das sollte eigentlich die Lösung zur ursprünglichen Problemstellung sein, den Code den du gepostet hast, würde ich eher interpretieren als "Desktop kopieren und davon was abschneiden"... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:27 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