![]() |
Transparenz-Farbe von TImage ändern
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo, ich versuche in Delphi
![]()
Delphi-Quellcode:
Allerdings wird dann nur noch rot angezeigt, was suggeriert, dass die transparente Farbe noch immer weiß ist:
procedure TForm1.Image1Click(Sender: TObject);
var b : TBitmap; begin b := TBitmap.Create(); b.LoadFromFile('Koenig_weiss.bmp'); b.Transparent := true; b.TransparentColor := clRed; Image1.Picture.Graphic := b; end; Anhang 56805 Kann mir irgendjemand sagen, was ich falsch mache? Danke im Voraus :) |
AW: Transparenz-Farbe von TImage ändern
Transparentcolor rot wird bei dem Bild nicht funktionieren, weil in dem Bild nichts rot (= clRed) ist, die überwiegend vorkommende Farbe ist $005334FE.
|
AW: Transparenz-Farbe von TImage ändern
Zitat:
Delphi-Quellcode:
Leider bleibt das Ergebnis unverändert.
b.TransparentColor := $005334FE;
|
AW: Transparenz-Farbe von TImage ändern
Das Bitmap ist erstmal zu groß für das TImage, was man entweder durch setzen von Stretch := True oder AutoSize := True lösen kann;
Weiterhin sollte das TImage ebenfalls ein Transparent := True bekommen. Die TBitmap.TransparentXXX Eigenschaften wirken sich nur auf das Zeichnen aus, nicht auf den Inhalt der Bitmap. |
AW: Transparenz-Farbe von TImage ändern
Zitat:
|
AW: Transparenz-Farbe von TImage ändern
Wobei dort das Tansparent vom Bitmap nicht über eine Farbe, sondern durch ein Pixel (die Farbe des einen Eck-Pixels) bestimmt wird.
![]() Muß es denn auch unbedingt ein Bitmap sein? z.B. PNG oder etwas aus der Familie Vector-Grafiken oder ![]() ![]() ![]() |
AW: Transparenz-Farbe von TImage ändern
Zitat:
Lediglich das Transparent von TImage überschreibt das Transparent der TBitmap bei der Zuweisung auf Picture.Graphic. Deswegen muss das beim Control passend gesetzt sein. |
AW: Transparenz-Farbe von TImage ändern
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Anhang 56806 (zumindest sieht man den König diesmal) Es hatte doch grad noch funktioniert :/ Ich hab den Code zum Testen etwas abgeändert. Siehe:
Delphi-Quellcode:
Hättet ihr vielleicht noch eine Idee? :(
procedure TForm1.Image1Click(Sender: TObject);
var b : TBitmap; pxc: TColor; hxc : string; begin b := TBitmap.Create(); b.LoadFromFile('Koenig_weiss.bmp'); b.TransparentColor := $FE5334; b.Transparent := true; Image1.Picture.Graphic := b; // folgendes wird nicht ausgeführt, was keinen Sinn ergibt, da.... if (Image1.Picture.Bitmap.Canvas.Pixels[0, 0] = $FE5334) then ShowMessage('toll'); pxc := Image1.Picture.Bitmap.Canvas.Pixels[0, 0]; hxc := IntToHex(ColorToRGB(pxc), 6); ShowMessage(hxc); // ...das hier #5334FE (hex) zurückgibt, was ja $FE5334 (delphi) ist end; (Und ja, ich muss eine Bitmap verwenden) (Beim Image ist stretched true und Transparent true) |
AW: Transparenz-Farbe von TImage ändern
Was bringt dich denn auf diese Idee?
Zitat:
Delphi-Quellcode:
function ColorToRGB(Color: TColor): Longint;
begin if Color < 0 then Result := GetSysColor(Color and $000000FF) else Result := Color; end; |
AW: Transparenz-Farbe von TImage ändern
Zitat:
|
AW: Transparenz-Farbe von TImage ändern
Da das Bild 'nen grauen Rand hat, kann Image1.Picture.Bitmap.Canvas.Pixels[0, 0] weder $5334FE noch $FE5334 sein. Die Randfarbe ist $F0F0F0 und damit ist auch Image1.Picture.Bitmap.Canvas.Pixels[0, 0] = $F0F0F0.
|
AW: Transparenz-Farbe von TImage ändern
Zitat:
|
AW: Transparenz-Farbe von TImage ändern
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:
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.
b.TransparentColor := $FE5334;
Frag' doch mal den Debugger, welchen Wert
Delphi-Quellcode:
hat, dann kannst Du sehen, welcher Wert hier vergeben wurde und warum eine Abfraqge auf $FE5334 bzw. $5334FE scheitert.
Image1.Picture.Bitmap.Canvas.Pixels[0, 0]
Wenn's mit dem Debugger nicht geht dann halt einfach mal ein
Delphi-Quellcode:
ShowMessage(IntToHex(Image1.Picture.Bitmap.Canvas.Pixels[0, 0]));
|
AW: Transparenz-Farbe von TImage ändern
Dreh mal die Sequenz um, d.h. lade erst die Bitmap und setze dann die Transparenzparameter
|
AW: Transparenz-Farbe von TImage ändern
Im Hex-Integer wird logisch wie bei Dezimal gezählt, also Links ist das MSB, also die größte Ziffer/Byte,
während dieser HTML-Color-Code links das erste/kleinste Byte hat, also wie im Atbeitsspeicher. BigEndian und LittleEndian Drum sind hier die RGB gedreht. $ABGR vs. #RGB |
AW: Transparenz-Farbe von TImage ändern
Zitat:
Delphi-Quellcode:
var b : TBitmap;
pxc: TColor; hxc : string; begin b := TBitmap.Create(); try b.Transparent := true; b.TransparentColor := $005334FE; b.LoadFromFile('c:\Users\Uwe\Downloads\Koenig_weiss.bmp'); Image1.Picture.Graphic := b; Image1.Transparent := True; if (Image1.Picture.Bitmap.Canvas.Pixels[0, 0] = $5334FE) then ShowMessage('toll'); // kommt! pxc := Image1.Picture.Bitmap.Canvas.Pixels[0, 0]; hxc := IntToHex(ColorToRGB(pxc), 6); ShowMessage(hxc); // zeigt 5334FE finally b.Free; end; end; |
AW: Transparenz-Farbe von TImage ändern
Delphi-Quellcode:
$578B2E = #2E8B57
var
C: TColor; S, S2: string; begin C := clWebSeaGreen; S := IntToHex(C, 6); SetLength(S2, 6); BinToHex(@C, PChar(S2), 3); ShowMessage('$' + S + ' = #' + S2); end; |
AW: Transparenz-Farbe von TImage ändern
Du hast nach dem Weg gefragt. himitsu stand an der Gabelung #6 und gab dir den Tipp: "Rechts abbiegen und in Richtung PNGImage weiter fahren." Mein Tipp: Fahr zurück zur Kreuzung #6 und...
Konvertiere mit einem Malprogramm (oder online) deine BMP in eine PNG mit Transparenz. Lade deine PNG ins Image und fertig. |
AW: Transparenz-Farbe von TImage ändern
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; |
AW: Transparenz-Farbe von TImage ändern
Danke erstmal für die vielen Antworten!
Zitat:
|
AW: Transparenz-Farbe von TImage ändern
Zitat:
|
AW: Transparenz-Farbe von TImage ändern
Zitat:
|
AW: Transparenz-Farbe von TImage ändern
Zitat:
|
AW: Transparenz-Farbe von TImage ändern
Zitat:
|
AW: Transparenz-Farbe von TImage ändern
Liste der Anhänge anzeigen (Anzahl: 2)
Zitat:
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) |
AW: Transparenz-Farbe von TImage ändern
Zitat:
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. |
AW: Transparenz-Farbe von TImage ändern
Zitat:
|
AW: Transparenz-Farbe von TImage ändern
Zitat:
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). |
AW: Transparenz-Farbe von TImage ändern
Zitat:
|
AW: Transparenz-Farbe von TImage ändern
Zitat:
|
AW: Transparenz-Farbe von TImage ändern
Könnte es sein, dass die Bitmap 32 Bit ARGB ist, d.h. noch ein Alphawert von $FF000000 hat, und daher Transparentcolor etc. 'ins Leere läuft'?
Manche Graphikprogramme neigen auch dazu, selbständig Ränder und Übergänge zu 'verschönern'. |
AW: Transparenz-Farbe von TImage ändern
Zitat:
|
AW: Transparenz-Farbe von TImage ändern
Zitat:
|
AW: Transparenz-Farbe von TImage ändern
Liste der Anhänge anzeigen (Anzahl: 1)
Ich habe dir den König noch in eine .png umgewandelt. (Attached)
Benötigt 300 Mal weniger Platz und lässt sich einfach laden:
Delphi-Quellcode:
try
Image1.Picture.LoadFromFile('C:\Users\micha\Desktop\kw.png'); except on E: Exception do ShowMessage('Fehler beim Laden des Bildes: ' + E.Message); end; |
AW: Transparenz-Farbe von TImage ändern
Zitat:
|
AW: Transparenz-Farbe von TImage ändern
Liste der Anhänge anzeigen (Anzahl: 1)
Keine Ahnung, weshalb eine JPG draus wurde - eventuell bin ich zu doof fürs Attachen. Bei mir war's noch eine png.
Ich packe die Datei mal in eine ZIP und hoffe, dass die Forensoftware gnädig zu mir ist. Leider weiss ich nicht, wie ich Attachments abändern kann (kann man das?). Ja man kann - zu spät... ;-) |
AW: Transparenz-Farbe von TImage ändern
Vielen Dank an alle für die vielen Antworten! Ich habe mich schlussendlich doch den PNGs ergeben und dieser Code hat mein Problem dann endgültig beseitigt:
Delphi-Quellcode:
Danke nochmal, ohne euch wäre ich aufgeschmissen :D
procedure TForm1.Button1Click(Sender: TObject);
var Stream: TMemoryStream; Image: TPngImage; begin Stream := TMemoryStream.Create; try // PNG-Bild erhalten, aus Datei oder anderem laden... // Beispiel: Stream.LoadFromFile('c:\\file.png'); Stream.LoadFromFile('kw.png'); Stream.Position := 0; Image := TPngImage.Create; try Image.LoadFromStream(Stream); Image1.Picture.Graphic := Image; Image1.BringToFront(); finally Image.Free; end; finally Stream.Free; end; end; |
AW: Transparenz-Farbe von TImage ändern
Zitat:
Delphi-Quellcode:
Der Code in #19 erzeugt dir für jede Schachfigur ein PNG-File.
Image1.Picture.LoadFromFile('kw.png');
|
AW: Transparenz-Farbe von TImage ändern
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:34 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