Delphi-PRAXiS
Seite 3 von 4     123 4      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Delphi Transparenz-Farbe von TImage ändern (https://www.delphipraxis.net/215042-transparenz-farbe-von-timage-aendern.html)

Kevinpptx 28. Apr 2024 12:07

AW: Transparenz-Farbe von TImage ändern
 
Zitat:

Zitat von Delphi.Narium (Beitrag 1536190)
Das oben verlinke Bild hat aber auch keinen durchgehenden Rand in $005334FE, sondern 'nen kleinen schwarzen Block und 'nen recht großen weißen Balken. Wenn mich nicht alles täuscht, dürfte Pixels[0, 0] = $FFFFFF sein.

Dashier
Delphi-Quellcode:
b.TransparentColor := $FE5334;
verstehe ich nicht. Wenn ich bei meinem Delphi bei irgendeiner Komponenten als Farbe $FE5334 vergebe, wird's blau, bei $5334FE erhalte ich jedoch ein rotes Bild, so wie in der verlinkten Datei.

Frag' doch mal den Debugger, welchen Wert
Delphi-Quellcode:
Image1.Picture.Bitmap.Canvas.Pixels[0, 0]
hat, dann kannst Du sehen, welcher Wert hier vergeben wurde und warum eine Abfraqge auf $FE5334 bzw. $5334FE scheitert.

Wenn's mit dem Debugger nicht geht dann halt einfach mal ein
Delphi-Quellcode:
ShowMessage(IntToHex(Image1.Picture.Bitmap.Canvas.Pixels[0, 0]));

Tut mir Leid für die Verwirrung. Inzwischen hatte ich bereits das Bild ohne die schwarzen und weißen Pixel verwendet, aber vergessen, dass oben noch das Original verlinkt war. Ich habe das richtige Bild jetzt oben verlinkt.

Kevinpptx 28. Apr 2024 12:10

AW: Transparenz-Farbe von TImage ändern
 
Zitat:

Zitat von Michael II (Beitrag 1536197)
himitsu hat in #6 Links auf Schachfiguren in Unicode Zeichensätzen gepostet (es gibt viele, auch um einen WInkel w gedrehte).

Hier unten ein Beispiel, wie du alle 10 Schachfiguren eines Unicodezeichensatzes je als PNG abspeichern kannst.

Alternativ zum Speichern in PNGs könntest du die Bitmaps in eine Imagelist schreiben und hättest dann via diese Liste einfachen Zugriff auf die Bilder (Addmasked).

Delphi-Quellcode:
uses PNGImage;

procedure TForm108.Button1Click(Sender: TObject);
var figur, b : TBitMap;
    pngfigur : TPNGImage;
    cs : unicodestring;
    hl, br, ho, i : integer;
    te : TSize;
begin
  for i := $2654 to $265f do cs := cs + widechar(i);
  b := TBitMap.Create;
  figur := TBitMap.Create;
  pngfigur := TPNGImage.Create;
 try
  br := 200; // breite einer schachfigur grafik
  ho := 200; // hölhe

  b.SetSize( 10*br, ho ); // bitmap, in welche wir alle 10 figuren schreiben werden
  b.Canvas.Font.Name := 'Segoe UI Symbol1'; // eine unicode fähige schrift wählen
  // Arial Unicode MS1, Code20001, DejaVu Sans1, DejaVu Sans Mono1, Segoe UI Symbol1, Symbola1, Unifont1
  b.Canvas.Font.Height := b.Height; // schrifthöhe
  b.Canvas.Font.Color := clblack; // farbe der schrift

  hl := 0;
  // figuren zeichnen
  for i := 1 to 10 do
  begin
    te := b.Canvas.TextExtent(cs[i]);
    b.Canvas.TextOut(hl+(br-te.cx) div 2, (ho-te.cy) div 2, cs[i] );
    inc(hl,br);
  end;
  // umgebung der figuren rot einfärben bis zur randfarbe der figuren
  b.Canvas.Brush.Color := clred;
  b.Canvas.Brush.Style := bsSolid;
  b.Canvas.FloodFill(0,0,b.Canvas.Font.Color,fsBorder);

  // figurenbitmap
  figur.SetSize(br,ho);
  // transparenz festlegen
  figur.TransparentColor := clred;
  figur.TransparentMode := tmFixed;
  figur.Transparent := true;

  // die 10 figuren in png files abspeichern
  hl := 0;
  for i := 1 to 10 do
  begin
    figur.Canvas.CopyRect(Rect(0,0,figur.Width,figur.Height), b.Canvas, Rect(hl,0,hl+br,ho) );
    pngfigur.Assign( figur );
    pngfigur.SaveToFile( extractfilepath(paramstr(0)) + 'fig' + i.ToString + '.png' );
    inc(hl,br);
  end;
 finally
  b.Free;
  figur.Free;
  pngfigur.Free;
 end;
end;

Hallo Michael, danke schonmal für deine Mühe! Ich habe noch Hoffnung auf den Ansatz, der hier die ganze Zeit besprochen wird (vor allem, weil es bei Uwe Raabe zu funktionieren scheint), aber wenn ich das aufgebe, dann werde ich mir deine Lösung mal genauer anschauen.

Kevinpptx 28. Apr 2024 12:15

AW: Transparenz-Farbe von TImage ändern
 
Zitat:

Zitat von TomyN (Beitrag 1536191)
Dreh mal die Sequenz um, d.h. lade erst die Bitmap und setze dann die Transparenzparameter

Hat leider nicht funktioniert.

Michael II 28. Apr 2024 14:36

AW: Transparenz-Farbe von TImage ändern
 
Zitat:

Zitat von Kevinpptx (Beitrag 1536198)

Mit diesem Code kommt zumindest auch "toll" bei mir, allerdings ist das Bild immer noch nicht transparent :(.

Ich habe den Code auch geladen in D11.2. Bei mir wird zuerst auch toll angezeigt, dann wird im Image ein dunkelgrauer König angezeigt (erwartet weiss). Die dünne Linie am unteren Bildrand wird (wie im Quellbild) aber weiss dargestellt. Alles um den König rum ist transparent.

Kevinpptx 28. Apr 2024 14:45

AW: Transparenz-Farbe von TImage ändern
 
Liste der Anhänge anzeigen (Anzahl: 2)
Zitat:

Zitat von Michael II (Beitrag 1536203)
Zitat:

Zitat von Kevinpptx (Beitrag 1536198)

Mit diesem Code kommt zumindest auch "toll" bei mir, allerdings ist das Bild immer noch nicht transparent :(.

Ich habe den Code auch geladen in D11.2. Bei mir wird zuerst auch toll angezeigt, dann wird im Image ein dunkelgrauer König angezeigt (erwartet weiss). Die dünne Linie am unteren Bildrand wird (wie im Quellbild) aber weiss dargestellt. Alles um den König rum ist transparent.

Wieso ist bei mir dann immer noch alles rot?
Anhang 56807

Ich habe mal meinen Projektordner hier hochgeladen, falls es hilft (Relevant im Projekt ist das Image oben Rechts im Hauptformular und die Methode Image1Click in UMain):

Anhang 56808 (Verwendet Delphi 11.3)

Michael II 28. Apr 2024 14:47

AW: Transparenz-Farbe von TImage ändern
 
Zitat:

Zitat von Kevinpptx (Beitrag 1536200)
[
Hallo Michael, danke schonmal für deine Mühe! Ich habe noch Hoffnung auf den Ansatz, der hier die ganze Zeit besprochen wird (vor allem, weil es bei Uwe Raabe zu funktionieren scheint), aber wenn ich das aufgebe, dann werde ich mir deine Lösung mal genauer anschauen.

Dann hast du gleich alle 10 Schachfiguren aufs Mal - bei 200x200 Pixel benötigen diese 20.9 KB (21’448 Bytes) - und du musst sie nicht mal auf Platte speichern; kannst die Figuren zur Laufzeit in der von dir gewünschten Grösse erzeugen lassen.
Dein weisser König allein frisst 6.03 MB (6’327’450 Bytes) Speicher...

Und wie erwähnt: Wenn du deine Bitmap in einem Malprogramm transparent abspeicherst (ob als ARGB BMP oder PNG), dann hast du in Delphi kein Problem mehr mit dem Laden.

Kevinpptx 28. Apr 2024 14:52

AW: Transparenz-Farbe von TImage ändern
 
Zitat:

Zitat von Michael II (Beitrag 1536205)
Zitat:

Zitat von Kevinpptx (Beitrag 1536200)
[
Hallo Michael, danke schonmal für deine Mühe! Ich habe noch Hoffnung auf den Ansatz, der hier die ganze Zeit besprochen wird (vor allem, weil es bei Uwe Raabe zu funktionieren scheint), aber wenn ich das aufgebe, dann werde ich mir deine Lösung mal genauer anschauen.

Dann hast du gleich alle 10 Schachfiguren aufs Mal - bei 200x200 Pixel benötigen diese 20.9 KB (21’448 Bytes) - und du musst sie nicht mal auf Platte speichern; kannst die Figuren zur Laufzeit in der von dir gewünschten Grösse erzeugen lassen.
Dein weisser König allein frisst 6.03 MB (6’327’450 Bytes) Speicher...

Und wie erwähnt: Wenn du deine Bitmap in einem Malprogramm transparent abspeicherst (ob als ARGB BMP oder PNG), dann hast du in Delphi kein Problem mehr mit dem Laden.

Ich werde es um 17:00 Uhr mal versuchen und mich dann melden.

Michael II 28. Apr 2024 15:35

AW: Transparenz-Farbe von TImage ändern
 
Zitat:

Zitat von Kevinpptx (Beitrag 1536204)
Wieso ist bei mir dann immer noch alles rot?
Ich habe mal meinen Projektordner hier hochgeladen,

Ich habe dein Projekt geladen.
Mit dem ursprünglich geposteten BMP: Meldungen "toll" sowie Farbcodes wie erwartet. König dunkelgrau (erwartet weiss), Umgebung transparent.
Mit deinem neuen BMP File: "toll", Farbcodes wie erwartet, König weiss, Umgebung rot (nicht transparent).

Kevinpptx 28. Apr 2024 15:43

AW: Transparenz-Farbe von TImage ändern
 
Zitat:

Zitat von Michael II (Beitrag 1536208)
Zitat:

Zitat von Kevinpptx (Beitrag 1536204)
Wieso ist bei mir dann immer noch alles rot?
Ich habe mal meinen Projektordner hier hochgeladen,

Ich habe dein Projekt geladen.
Mit dem ursprünglich geposteten BMP: Meldungen "toll" sowie Farbcodes wie erwartet. König dunkelgrau (erwartet weiss), Umgebung transparent.
Mit deinem neuen BMP File: "toll", Farbcodes wie erwartet, König weiss, Umgebung rot (nicht transparent).
Dann habe ich gedacht, ich lösche mal dein Image1 und füge ein neues ein. Ergebnis mit deinem neuen BMP File; "toll", Farbcodes wie erwartet. König hat das Weite gesucht: alles rot.

Das wird alles immer verwirrender hier :roteyes:

Michael II 28. Apr 2024 16:58

AW: Transparenz-Farbe von TImage ändern
 
Zitat:

Zitat von Kevinpptx (Beitrag 1536209)

Das wird alles immer verwirrender hier :roteyes:

Hast du an der roten Farbe "rumgeschraubt" ;-). Ich behaupte nun, dass der König nicht weiss sein muss - du hast diesen ja 233,233,233 definiert - also alles OK (falls er dann bei dir auch transparent...).


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:32 Uhr.
Seite 3 von 4     123 4      

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