AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Bitmap Ränder entfernen

Ein Thema von Christian18 · begonnen am 13. Aug 2007 · letzter Beitrag vom 14. Aug 2007
Antwort Antwort
Christian18

Registriert seit: 9. Dez 2003
Ort: Hamburg
1.279 Beiträge
 
#1

Bitmap Ränder entfernen

  Alt 13. Aug 2007, 14:40
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
  Mit Zitat antworten Zitat
Benutzerbild von Martin K
Martin K

Registriert seit: 20. Okt 2005
919 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Bitmap Ränder entfernen

  Alt 13. Aug 2007, 14:47
TBitmap hat eine Canvas und diese hat die Methode CopyRect.
Schau mal in der Hilfe nach, wie CopyRect zu verwenden ist.
Mit den Menschen ist es wie mit Computern -
es gibt Nullen und Einsen.
  Mit Zitat antworten Zitat
Christian18

Registriert seit: 9. Dez 2003
Ort: Hamburg
1.279 Beiträge
 
#3

Re: Bitmap Ränder entfernen

  Alt 13. Aug 2007, 16:41
Hallo,

ich habe das mal probiert.
        Bitmap.Canvas.CopyRect(Rect(VLeft, VTop, VRight, VBottom), Canvas, Screen.DesktopRect); Anschließend speichere ich das Bitmap in einer datei. Wenn ich das bild öffe, ist alles einfach nur weiss.

Was habe ich falsch gemacht???
  Mit Zitat antworten Zitat
Benutzerbild von Martin K
Martin K

Registriert seit: 20. Okt 2005
919 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: Bitmap Ränder entfernen

  Alt 13. Aug 2007, 17:06
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
Mit den Menschen ist es wie mit Computern -
es gibt Nullen und Einsen.
  Mit Zitat antworten Zitat
Christian18

Registriert seit: 9. Dez 2003
Ort: Hamburg
1.279 Beiträge
 
#5

Re: Bitmap Ränder entfernen

  Alt 14. Aug 2007, 20:56
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);
  Mit Zitat antworten Zitat
Benutzerbild von Martin K
Martin K

Registriert seit: 20. Okt 2005
919 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: Bitmap Ränder entfernen

  Alt 14. Aug 2007, 21:56
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:
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;
Hättest du dir meinen Beitrag weiter oben durchgelesen, wärst du schnell auch auf diesen Code gekommen.
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"...
Mit den Menschen ist es wie mit Computern -
es gibt Nullen und Einsen.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:50 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz