![]() |
Firemonkey: Image, per code Bitmaps ins MultiResBitmap und neue Transparenzfarbe
Liste der Anhänge anzeigen (Anzahl: 2)
Also, sehr langer Titel, aber besser bekam ich es nicht auf den Punkt. Ich benutze Delphi XE5 und arbeite mit Windows 7.
Also ich suche Folgendes: 1.Im MultiResBitmap-Editor kann man ja die transparente Farbe der geladenen Bitmaps auswählen. Wie man diese im Code umstellt, weiß ich auch schon:
Delphi-Quellcode:
Nun ist es aber so, dass diese transparente Farbe nicht übernommen wird. Also ich drücke auf einen Button, die Zeile Code wird ausgeführt und nix geschieht. Muss ich das MultiResBitmap vllt. neuladen oder was müsste ich da noch tun?
Image1.MultiResBitmap.TransparentColor:=$FFFFFF;
2. Ich habe ein Image und in dieses müssen immer wieder verschiedene Bitmaps geladen werden. Mein Frage nun, wie lade ich in Firemonkey neue Bitmaps in ein Image. Oder besser wie lade ich diese in den MultiResBitmap, damit sie auch die transparente Farbe übernehmen? Ich hoffe ihr versteht mein Problem und könnt mir helfen. P.S: Ich habe die beiden Bilder zwischen denen, erstmal zum Test, geswitcht werden soll, habe ich mal in den anhang gepackt. Doch ich habe keine Ahnung warum sie im jpg-Format sind. Ursprünglich waren sie im bmp-Format und haben eine voreingestellte 50% Transparenz. |
AW: Firemonkey: Image, per code Bitmaps ins MultiResBitmap und neue Transparenzfarbe
Zitat:
![]() Zitat:
|
AW: Firemonkey: Image, per code Bitmaps ins MultiResBitmap und neue Transparenzfarbe
Ach ok, Da habe ich das wohl komplett überlesen. Ich bin ja eigentlich keiner, der eine Frage stellt ohne vorher die Hilfe oder Google in Anspruch zu nehmen.
Also einfach das Bild neu laden? Da kommt Nummer 2 ins Spiel. Wie lade ich denn neue Bitmaps oder das aktuelle neu? Zudem habe ich gesagt, dass ich den Befehl ja schon kenne. Nur falls du es nicht gelesen hast, da die Hilfe mir ja nur den Befehl und eine kurze Beschreibung gibt. (wäre ja toll gewesen, wenn du darauf auch eingegangen wärst ^^) |
AW: Firemonkey: Image, per code Bitmaps ins MultiResBitmap und neue Transparenzfarbe
Wie ebenfalls in der Hilfe nachzulesen ist, wird die TransparentColor von CreateBitmap ausgewertet.
(Code ungetestet!)
Delphi-Quellcode:
var
bmp: TBitmap; mr: TFixedMultiResBitmap; begin { lade Bitmap aus Datei Hurz.bmp in Items[0] der MultiResBitmap mit Berücksichtigung der TransparentColor } bmp := mr[0].CreateBitmap('Hurz.bmp'); try mr[0].Bitmap.Assign(bmp); finally bmp.Free; end; end; |
AW: Firemonkey: Image, per code Bitmaps ins MultiResBitmap und neue Transparenzfarbe
Zu meinem Bedauern muss ich dir sagen, dass mr bei mir nicht auf TFixedMultiResBitmap gesetzt werden kann. Undeklarierter Bezeichner!
[2 Minuten später]: Es muss TImageMultiResBitmap sein. Danke für die Hilfe. |
AW: Firemonkey: Image, per code Bitmaps ins MultiResBitmap und neue Transparenzfarbe
Die Deklaration als TFixedMultiResBitmap steht eigentlich nur als Hinweis da. Natürlich sollst du für
Delphi-Quellcode:
die bestehende Instanz deiner MultiResBitmap einsetzen.
mr
|
AW: Firemonkey: Image, per code Bitmaps ins MultiResBitmap und neue Transparenzfarbe
Ich und meine Leitungssteherei ^^. Ja wie gesagt hat funktioniert. Allerdings findet er meine Bilddatei nicht. Wenn dieser Befehl:
Delphi-Quellcode:
ausgeführt wird, gibt er mir eine Zugriffsverletzung aus. Entweder liegts an den Ordner-Rechten (teste ich sofort) oder es liegt daran wo die Datei liegt. Wenn ich die Datei Test.bmp laden will, wo muss sie liegen?
bmp := mr[0].CreateBitmap('Test.bmp');
[2 Minuten später]: Also an den Orner-Rechten liegt es nicht! P.S: Das ist die Fehlermeldung: "Zugrffsverletzung bei Adresse 8BFFFA0D. Lesen von Adresse 8BFFFA0D." |
AW: Firemonkey: Image, per code Bitmaps ins MultiResBitmap und neue Transparenzfarbe
Du solltest nicht mr verwenden - die Variable habe ich nur zur Veranschaulichung eingeführt. Da sie nicht initialisiert wird, führt der Zugriff auf mr[0] zu der Zugriffsverletzung.
Du solltest anstatt mr schon dein Image1.MultiResBitmap verwenden. Natürlich müssen die Bitmaps bereits existieren. Mit Image1.MultiResBitmap[0] sprichst du das erste, mit Image1.MultiResBitmap[1] das zweite an usw. |
AW: Firemonkey: Image, per code Bitmaps ins MultiResBitmap und neue Transparenzfarbe
Also muss es statt
Delphi-Quellcode:
so heißen:
bmp := mr[0].CreateBitmap('Test.bmp');
Delphi-Quellcode:
?
bmp := Image1.MultiResBitmap[0].CreateBitmap('Test.bmp');
Wenn dem so ist (was ich nicht glaube, bei meiner gerade sehr dürftigen Aufnahmefähigkeit :(), habe ich wieder eine Zugriffsverletzung. Diesmal bei Adresse 00000000. Ich glaube die Nullen sollen mich darauf hinweisen, dass das Bild fehlt? Das Bild ist in jedem einzelnen Ordner meines Projektes vertreten, um alle möglichen Pfade abzudecken. Wenn er das Bild also nicht findet... wo muss das Bild denn dann hin außer in den Projektordner? Boah bin ich heute schwer von kp. Tut mir echt sry Uwe.:oops: P.S: Nur nochmal zur Info. Die Bitmaps sollen aus einer Datei heraus in die MultiResBitmap geladen werden. Also nicht über den Editor hinzugefügt werden, sondern über den Code. |
AW: Firemonkey: Image, per code Bitmaps ins MultiResBitmap und neue Transparenzfarbe
Zitat:
Delphi-Quellcode:
procedure TForm27.AddBitmap(const AFileName: string; AScale: Single);
var itm: TFixedBitmapItem; begin itm := Image1.MultiResBitmap.Add; itm.Scale := AScale; LoadBitmap(itm, AFileName); end; procedure TForm27.ChangeBitmap(AIndex: Integer; const AFileName: string); begin LoadBitmap(Image1.MultiResBitmap[AIndex], AFileName); end; procedure TForm27.LoadBitmap(AItem: TFixedBitmapItem; const AFileName: string); var bmp: TBitmap; begin bmp := AItem.CreateBitmap(AFileName); try AItem.Bitmap.Assign(bmp); finally bmp.Free; end; end; |
AW: Firemonkey: Image, per code Bitmaps ins MultiResBitmap und neue Transparenzfarbe
Ok also langsam...
TFixedBitmapItem ist ein undeklarierter Bezeichner. Ich habe die Prozeduren unter den Public-Declarations deklariert und auch verscheidene Varianten von TFixedBitmapItem probiert. Probiert habe ich TBitmapItem, TMultiResBitmapItem, TImageMultiResBitmapItem, TImageBitmapItem, TMultiResImageBitmapItem und all diese Varianten auch mal ohne das Wort Bitmap, auch wenns sinnlos scheint. Diesmal habe ich also versucht auf meine bestehende MultiRes zuzweisen. Aber na gut. Ich hoffe wieder auf helfende Antworten :). |
AW: Firemonkey: Image, per code Bitmaps ins MultiResBitmap und neue Transparenzfarbe
Liste der Anhänge anzeigen (Anzahl: 2)
Standardmäßig hat das Multiresbitmap bereits ein Bitmap drin. Man kann dann prüfen ob es einen Inhalt hat und wenn ja, nur dann eine Bitmap hinzufügen.
Hier ist der Code, wie man z.B. über einen Opendialog eine Bitmap hinzufügt.
Delphi-Quellcode:
Ich habe mal eine Demo angehängt, womit man mehrere Grafikdateien nacheinander in eine Multiresbitmap laden kann. Die Transparenz bleibt erhalten. Wenn man auf die Listbox links unten auf einen Eintrag klickt, wird in Image2 das jeweilige Bitmap aus Image1 angezeigt.
procedure TForm62.Button1Click(Sender: TObject);
begin if od1.Execute then begin if Image1.MultiResBitmap.Items[Image1.MultiResBitmap.Count-1].Bitmap.isempty = false then Image1.MultiResBitmap.Add; Image1.MultiResBitmap.Items[Image1.MultiResBitmap.Count-1].Bitmap.loadfromfile (od1.FileName); end; end; |
AW: Firemonkey: Image, per code Bitmaps ins MultiResBitmap und neue Transparenzfarbe
Danke Harry. Diesen LoadFromFile Befehl habe ich die ganze Zeit gesucht.
Ich verstehe nur nicht warum er erst so spät kommt. Ich will mich weissgott nicht beschweren, aber wenn ich schreibe, dass ich eine Bitmap aus einer Datei in einem Image anzeigen lassen will, hätte ich mit diesem LoadFromFile-Befehl eher gerechnet. Aber wie gesagt ich will mich nicht beschweren. Es funktioniert alles wie es soll. Das Thema ist hiermit geschlossen. |
AW: Firemonkey: Image, per code Bitmaps ins MultiResBitmap und neue Transparenzfarbe
Wird mit dem LoadFromFile denn die TransparentColor richtig umgesetzt?
|
AW: Firemonkey: Image, per code Bitmaps ins MultiResBitmap und neue Transparenzfarbe
@Uwe Raabe
Ja, die Transparenz bleibt erhalten, wobei Voraussetzung ist, dass man die Grafik aus einer Datei lädt, welche die Transparenz standardmäßig unterstützt (z.B. eine PNG-Datei). |
AW: Firemonkey: Image, per code Bitmaps ins MultiResBitmap und neue Transparenzfarbe
Bei PNG ist das klar, aber gilt das auch für beliebige BMP Dateien? Wenn dem so wäre, warum dann der ganze Aufwand in CreateBitmap?
Nun gut, solange es funktioniert ist ja alles in Ordnung. |
AW: Firemonkey: Image, per code Bitmaps ins MultiResBitmap und neue Transparenzfarbe
[QUOTE=Uwe Raabe;1269717]
Zitat:
Wie kommt diese Zeile mit Hilfe von RAD Studio zustande? Handgeschrieben? Ein Ereignis finde ich dafür nicht im Objektinspektor. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:01 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