AGB  ·  Datenschutz  ·  Impressum  







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

Radieren/Freilegen von Bildern mit FMX

Ein Thema von paul.kunig · begonnen am 23. Jul 2019 · letzter Beitrag vom 28. Aug 2019
Antwort Antwort
Seite 2 von 3     12 3      
paul.kunig

Registriert seit: 25. Sep 2017
42 Beiträge
 
Delphi 10.3 Rio
 
#11

AW: Radieren/Freilegen von Bildern mit FMX

  Alt 23. Jul 2019, 22:04
Langsam gerät die Sache außer Kontrolle.

Das mit der Maus war in meinem letzten Post lediglich eine Möglichkeit. Ich arbeite mit einem Timer, der in bestimmten Abständen etwas freilegen soll.

Das mit der Transparenz war eine Idee, die dieses Hin- und Herkopieren vermeiden/ersetzen sollte, so in dem Sinn Fläche erreicht Image.Teilbereich.Opacity:=1 .

Werde nun erst einmal CopyfromBitmap ausprobieren und mich später noch einmal melden.

Danke bis hierher.
  Mit Zitat antworten Zitat
paul.kunig

Registriert seit: 25. Sep 2017
42 Beiträge
 
Delphi 10.3 Rio
 
#12

AW: Radieren/Freilegen von Bildern mit FMX

  Alt 29. Jul 2019, 09:50
Hallo,

habe die Methode Hier im Forum suchenCopyfromBitmap ausprobiert.
Scheint die Richtige zu sein.

Zum Testen habe ich ein normales Foto.jpg und ein Schwarzes.jpg verwendet.

Erstelle ich allerdings ein Bitmap zur Laufzeit und färbe die Zeichenfläche(Canvas) schwarz, funktioniert es nicht mehr.

Die Zeichenfläche bleibt schwarz.

Oder muss ich das Bitmap zur Laufzeit erzeugen, schwarz färben, abspeichern und es beim Beenden des Programmes wieder von der Festplatte löschen?

Gruß
  Mit Zitat antworten Zitat
striderx

Registriert seit: 11. Feb 2007
Ort: Bergisch Gladbach
206 Beiträge
 
Delphi 10.4 Sydney
 
#13

AW: Radieren/Freilegen von Bildern mit FMX

  Alt 29. Jul 2019, 10:50
Du erstellst beide Bitmaps zur Laufzeit, färbst die eine eimalig Schwarz und lädst in die andere das Foto. Also nix mit speichern.

Dann kopierst du jeweils die entsprechenden Teile aus der Foto-Bitmap in die erste Bitmap und zeigst die so gänderte Bitmap in dem Image an an.


Wenn du mal etwa Code zeigen würdest, könnte man dir vielleicht besser helfen.
  Mit Zitat antworten Zitat
paul.kunig

Registriert seit: 25. Sep 2017
42 Beiträge
 
Delphi 10.3 Rio
 
#14

AW: Radieren/Freilegen von Bildern mit FMX

  Alt 31. Jul 2019, 09:31
Hallo striderx,

ich konnte folgende mir unverständliche Reaktion feststellen:
Gegeben:
TImage, 3x TButton.

Folgender Quelltext:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  MyRect: TRectF;
begin
  Image1.Bitmap.Clear($FFFFFF);
  // initializes the image bitmap canvas
  Image1.Bitmap := TBitmap.Create(241, 425);

  Image1.Bitmap.Clear($FFFFFF);
  // sets the rectangle to be drawn
  MyRect := TRectF.Create(0, 0, 241, 425);
  // fills and draws the rectangle on the canvas
  Image1.Bitmap.Canvas.BeginScene;
  Image1.Bitmap.Canvas.Fill.Color := TAlphaColors.Black;
  Image1.Bitmap.Canvas.FillRect(MyRect, 0, 0, AllCorners, 1);
  Image1.Bitmap.Canvas.EndScene;

end;

procedure TForm1.Button2Click(Sender: TObject);
var
  MyRect: TRectF;
begin
  Image1.Bitmap.Clear($FFFFFF);
  // initializes the image bitmap canvas
  Image1.Bitmap := TBitmap.Create(Image1.Bitmap.Width, Image1.Bitmap.Height);

  Image1.Bitmap.Clear($FFFFFF);
  // sets the rectangle to be drawn
  MyRect := TRectF.Create(0, 0, 241, 425);
  // fills and draws the rectangle on the canvas
  Image1.Bitmap.Canvas.BeginScene;
  Image1.Bitmap.Canvas.Fill.Color := TAlphaColors.Red;
  Image1.Bitmap.Canvas.FillRect(MyRect, 0, 0, AllCorners, 1);
  Image1.Bitmap.Canvas.EndScene;

end;

procedure TForm1.Button3Click(Sender: TObject);
var
  MyRect: TRectF;
begin
  Image1.Bitmap.Clear($FFFFFF);
  // initializes the image bitmap canvas
  Image1.Bitmap := TBitmap.Create;

  Image1.Bitmap.Clear($FFFFFF);
  // sets the rectangle to be drawn
  MyRect := TRectF.Create(0, 0, 241, 425);
  // fills and draws the rectangle on the canvas
  Image1.Bitmap.Canvas.BeginScene;
  Image1.Bitmap.Canvas.Fill.Color := TAlphaColors.Green;
  Image1.Bitmap.Canvas.FillRect(MyRect, 0, 0, AllCorners, 1);
  Image1.Bitmap.Canvas.EndScene;
Folgendes Verhalten in folgender Reihenfolge ist festzustellen:
Betätigen des Button1 = schwarzes Rechteck | O.k.
Betätigen des Button2 = rotes Rechteck | O.K
Betätigen des Button3 = löschen des roten Rechtecks(richtig wäre grünes Rechteck)

Erneutes Betätigen des Button2 = keine sichtbare Reaktion
Erneutes Betätigen des Button1 = schwarzes Rechteck |O.k.

Während das schwarze Rechteck jederzeit aufgerufen werden kann, wird das rote Rechteck nur gezeichnet, wenn vorher nicht Button3 betätigt wurde.

Hat jemand eine Idee, aus welchem Grund diese Verhalten auftritt?
Konnte man früher in Delphi die Komponenten nicht Positionieren, also z.B. 30px vom Rand, nächste Komponente 30px von erster Komponente usw.?

Gruß
  Mit Zitat antworten Zitat
striderx

Registriert seit: 11. Feb 2007
Ort: Bergisch Gladbach
206 Beiträge
 
Delphi 10.4 Sydney
 
#15

AW: Radieren/Freilegen von Bildern mit FMX

  Alt 31. Jul 2019, 16:54
Wie gesagt, mit FMX habe ich keine großen Erfahrungen, aber da sich anscheinend sonst keiner rührt ...

erst mal aufräumen:
  • Warum jeweils zwei Mal 'Image1.Bitmap.Clear($FFFFFF)' - einmal reicht.
    Und solange das Rechteck, das du zeichnest, genauso groß ist wie die Bitmap und das Rechteck nicht transparent ist, kannst du das auch ganz weglassen.
  • Das Setzen der Bitmap-Größe würde ich in das OnCreate-Ereignis des Formulars legen.


Zum seltsamen Verhalten:

Du schreibst nicht, was passiert genau, wenn man Button 3 anklickt. Welche Farbe hast du denn dann? Weiß? Und was passiert, wenn du Button 3 als erstes anklickst?


Zum Positionieren von Komponenten:

klar kann man das - was ist denn genau dein Problem?
  Mit Zitat antworten Zitat
paul.kunig

Registriert seit: 25. Sep 2017
42 Beiträge
 
Delphi 10.3 Rio
 
#16

AW: Radieren/Freilegen von Bildern mit FMX

  Alt 31. Jul 2019, 19:47
Hallo striderx,

ich habe es extra so ausführlich aufgeführt.
Das Löschen der Bitmap kann in diesem Fall ignoriert werden. Ansonsten hast du Recht, dass es einmal reicht.
Wie gesagt, in diesem Fall uninteressant.

Die Bitmap-Größe muss angegeben werden, da sonst kein Bitmap angezeigt wird.

Das Ganze wird im Normalfall im onCreate einmalig gesetzt. Zu Anschauungszwecken und zum Verständnis hier in verschieden Routinen verteilt.

Die Farbe ist die Standardfarbe des Image. Auch wenn der Button3 zuerst betätigt wird tut sich nichts.

So wie es aussieht hat Delphi noch immer Macken.

Der Fehler liegt in dieser Zeile:
 Image1.Bitmap := TBitmap.Create; Im Normalfall werden hier keine Parameter angegeben. Auch bei Nutzung von Strg+Leertaste wird nur Create ohne Parameter angeboten.

Tatsächlich gibt es noch constructor Create, der Parameter erwartet.
Dieses Create funktioniert aber nur bei richtiger Nutzung.

Erwartet wird hier ein Integer! Übergibt man allerdings Image.width(in Delphi 10 ist width ein Single), so funktioniert das Ganze nicht. Der Compiler zeigt allerdings keinen Fehler an.

Fazit:
Nur der Aufruf von Create führt dazu, dass das Bitmap nicht angezeigt wird.
Der Aufruf von Create mit Parametern vom falschen Typ führt ebenfalls zum Fehler wie vorher beschrieben, wird aber vom Compiler ignoriert.

Lediglich der Aufruf von Create mit Parametern vom richtigen/erwarteten Typ bringt das gewünschte Ergebnis.


Um eine Komponente zu Positionieren gibt man die Position von Links und von Oben an.
Label1.Left gibt es aber nicht.

Gruß
  Mit Zitat antworten Zitat
striderx

Registriert seit: 11. Feb 2007
Ort: Bergisch Gladbach
206 Beiträge
 
Delphi 10.4 Sydney
 
#17

AW: Radieren/Freilegen von Bildern mit FMX

  Alt 1. Aug 2019, 07:36
Zitat:
ich habe es extra so ausführlich aufgeführt.
Zitat:
Zu Anschauungszwecken und zum Verständnis hier in verschieden Routinen verteilt.
Wenn ich einen Fehler suche, baue ich mir die Sicht doch nicht mit unnötigem Kram zu.


Zitat:
So wie es aussieht hat Delphi noch immer Macken.
Mag ja sein, aber oft sitzt der Fehler auch vor dem PC.
Hast Du eigentlich mal nachgesehen, ob für Button 3 das OnClick-Ereignis noch 'verdrahtet' ist?


Zitat:
Label1.Left gibt es aber nicht.
Nö, aber Label.Position.X
  Mit Zitat antworten Zitat
paul.kunig

Registriert seit: 25. Sep 2017
42 Beiträge
 
Delphi 10.3 Rio
 
#18

AW: Radieren/Freilegen von Bildern mit FMX

  Alt 1. Aug 2019, 08:40
Hätte ich den deiner Meinung nach überflüssigen Kram nicht angegeben, würde darauf hingewiesen, dass etwas fehlt.
Weiterhin kann eine Fehlersuche nur stattfinden, wenn aller Kram angegeben ist, da sonst potenzielle Fehlerquellen möglicherweise ausgeschlossen werden bzw. nicht beachtet werden.

Zum Testen habe ich den Kram genau so benutzt.

Ja, das onClick-Ereignis für Button3 ist verdrahtet.

Danke für die Info auf die Eigenschaft Position.

Gruß
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
3.898 Beiträge
 
Delphi 12 Athens
 
#19

AW: Radieren/Freilegen von Bildern mit FMX

  Alt 1. Aug 2019, 14:06
Ich habe ein Image mit Bild benutzt und eine schwarze Zeichenoberfläche darüber gelegt.

Probleme kommen auf beim Freilegen der bereits besuchten Flächen, da beim Neuzeichnen natürlich die ganze Zeichenfläche neu gezeichnet wird.

Daher meine Überlegung, ob mein Ansatz überhaupt der Richtige ist.
Das ist leider bei FMX so, schau dir mal TScene an, das könnte hilfreich sein.
  Mit Zitat antworten Zitat
striderx

Registriert seit: 11. Feb 2007
Ort: Bergisch Gladbach
206 Beiträge
 
Delphi 10.4 Sydney
 
#20

AW: Radieren/Freilegen von Bildern mit FMX

  Alt 1. Aug 2019, 18:21
Batürlich geht das in FMX!

Anbei ein schnell zusammen-geklöppeltes Programm, das meinen geschilderten Ansatz zeigt. Wenn du jetzt noch in die zweite Bitmap zum Anfang ein Bild lädst, dann müsste das doch im Grunde das sein, was du eingangs beschrieben hast.
Angehängte Dateien
Dateityp: zip FMX-Test.zip (58,2 KB, 3x aufgerufen)

Geändert von striderx ( 2. Aug 2019 um 06:45 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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 12:04 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