AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Bitmaps in Transparenz ausblenden lassen
Thema durchsuchen
Ansicht
Themen-Optionen

Bitmaps in Transparenz ausblenden lassen

Ein Thema von onepiecefreak2 · begonnen am 19. Aug 2014 · letzter Beitrag vom 21. Aug 2014
Antwort Antwort
onepiecefreak2

Registriert seit: 13. Jun 2014
50 Beiträge
 
#1

AW: Bitmaps in Transparenz ausblenden lassen

  Alt 20. Aug 2014, 17:42
Also ich weiß nicht ob ich gerade auf der Leitung stehe oder nicht, aber irgndwie komm ich nicht hinterher.

Aber ich versuche es:
"C" wird im Quellcode erstellt, als ein TBitmap.
Dieses bekommt als Inhalt den Hintergrund.
Nun wird das halbtransparente Bild auf "C" gezeichnet und schrittweise ausgegeben.

Habe ich das richtig zusammengefasst?

Wenn ja, dann musst du mir erklären wie ich es denn schrittweise ausgebe. Weil diese Ausgabe ist ja dann im Prinzip der Ein-/Ausblendeffekt. Und den zu bewerkstelligen ist ja meine Frage.

Sry, dass ich mich so dumm anstelle .

Hoffe auf eine Antwort
  Mit Zitat antworten Zitat
Benutzerbild von Harry Stahl
Harry Stahl

Registriert seit: 2. Apr 2004
Ort: Bonn
2.558 Beiträge
 
Delphi 12 Athens
 
#2

AW: Bitmaps in Transparenz ausblenden lassen

  Alt 20. Aug 2014, 20:15
Du kannst z.B. diese Funktion, die voraussetzt, dass Deine Bitmap eine 32-Bit - Bitmap ist, nutzen, um die Transparenz zu ändern:

Delphi-Quellcode:

Type
  TRGB32 = packed record
    B, G, R, A: Byte;
  end;

  TRGB32Array = packed array[0..MaxInt div SizeOf(TRGB32)-1] of TRGB32;
  PRGB32Array = ^TRGB32Array;

procedure SetAlphaValue (bm: TBitmap; val: Byte);
var
  y, x, LineLen: Integer;
  FirstLine : PRGB32Array;
begin
  FirstLine := bm.ScanLine[0];
  LineLen := - bm.width;

  for y := 0 to bm.Height-1 do begin
    for x := 0 to bm.Width-1 do begin
      FirstLine[y*LineLen+x].A := val;
    end;
  end;
end;
"A" steht für Alpha-Value und ist der Wert, der die Transparenz eines Bildpunktes in der Bitmap beschreibt.

Du nimmst also Dein Original-Bitmap und weist dies einer Kopie zu. Die Kopie veränderst Du per Aufruf mit SetAlpha-Value, indem Du bei den jeweiligen Aufrufen bei der Variablen "Val" von 255 auf 0 runtergehst und zeigst dann die veränderte Kopie auf Deinem Canvas an. Zur Anzeige einer transparenten Bitmap auf Deinem Canvas musst Du eine Funktion nutzen, die transparente Bitmaps zeichnen kann, z.B. aus der Windows-API die "AlphaBlend".

Diese Lösung deckt eine Konstellation nicht ab, die aber nach Deiner Beschreibung auch nicht gefordert ist: Hat die Grafik bereits einzelne transparente Pixel, werden diese bei Aufruf von "SetAlphaValue" immer mit dem Wert von "Val" überschrieben, daher müsste man die Funktion anders gestalten, wollte man auch diese Konstellation erfassen. Das habe ich hier aber weggelassen, um die Sache nicht zu verkomplizieren.

Übrigens: Welche Delphi-Version nutzt Du und auf welchem Zielsystem soll Dein Programm eingesetzt werden? Solche Hintergründe sind relativ oft relevant für die korrekte Beantwortung solcher Fragen.

Geändert von Harry Stahl (20. Aug 2014 um 22:45 Uhr) Grund: Korrektur
  Mit Zitat antworten Zitat
onepiecefreak2

Registriert seit: 13. Jun 2014
50 Beiträge
 
#3

AW: Bitmaps in Transparenz ausblenden lassen

  Alt 20. Aug 2014, 21:30
Ich benutze das RAD-Studio XE5, mit dem ich seit geraumer Zeit arbeite. Besitze allerdings auch Delphi 7 und 5. Mein Programm sollte auf mind. Windows 7 funzen. Ich glaube aber gelesen zu haben, dass Win XP in etwa Win 7 sein soll, nur eben mit mehr Sicherheit, anderem Design etc. Wenn dem so ist, sollte es auch auf XP lauffähig sein.

Da die diese Transparenz auf alle mögliichen Konstellationen von Bildern funktionieren soll, ist dein Code eigentlich die "allgemeine" Lösung.

Nun muss ich Depp nur nochmal Canvas wiederholen ^^

P.S: Ich habe mir auf Anraten eines Posts in diesem Thread auch Graphics32 für XE5 angeschafft. Und hing dort an einem anderen Problem fest. Wenn ich den Alphawert des Bildes aus dem TImage32 auf 0 (voll transparent) setze, wird die Hintergrundfarbe des TImage32 angezeigt, anstatt dem TImage dahinter oder der Form.

Geändert von onepiecefreak2 (20. Aug 2014 um 21:32 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Harry Stahl
Harry Stahl

Registriert seit: 2. Apr 2004
Ort: Bonn
2.558 Beiträge
 
Delphi 12 Athens
 
#4

AW: Bitmaps in Transparenz ausblenden lassen

  Alt 20. Aug 2014, 23:27
OK, wenn Du XE5 hast, könntest Du das Problem auch ganz einfach mit FireMonkey lösen (z.B. in einem externen Dialog, den Du über eine DLL lädst - oder Du entwickelst das Programm direkt in FireMonkey ).

Anliegend mal ein Beispiel, für das ich keine 2 Minuten brauchte, um es zu entwickeln (soll sagen, wie schnell es mit FMX geht).

In einer TImage habe ich Dein Grünes Bitmap mit 50% Transparenz geladen (habe ich erst später gelesen, dass es schon eine Transparenz haben sollte).

Das TImage habe ich visuell mit der Trackbar gebunden, so dass der Wert Value von der Trackbar die Eigenschaft "Opacity" des Images ändert.

Ein ScreenShot und das Programm liegt anbei. Wenn Du die Trackbar ganz nach links ziehst, wird die Image ganz ausgeblendet.
Angehängte Grafiken
Dateityp: jpg Blend.jpg (45,1 KB, 14x aufgerufen)
Angehängte Dateien
Dateityp: zip Blenddemo.zip (58,6 KB, 24x aufgerufen)
  Mit Zitat antworten Zitat
onepiecefreak2

Registriert seit: 13. Jun 2014
50 Beiträge
 
#5

AW: Bitmaps in Transparenz ausblenden lassen

  Alt 21. Aug 2014, 07:02
Hmm,

also die Eigenschaft Opacity von Komponenten in FireMonkey kannte ich schon. Ich habe nämlich vor Kurzem erst meine App fertig programmiert. Aber das ich FireMonkey auch für Windows-Applikationen benutzen kann, war mir neu. Ich dachte FireMonkey ist für mobile Geräte?

Na, vieleicht habe ich einfach nur nicht drauf geachtet ^^. Ja, das wirds gewesen sein.
Ich schau einfach mal in das Demoprogramm. Dann wird sich mir einiges erschließen.

Werde ich heute Nachmittag, so gegen 18 Uhr mal testen. Wenns geklappt hat, bedanke ich mich jetztz schonmal bei dir Harry.

P.S: Ich habe mal deine Homepage besucht. Irgendwie sagt sie mir, dass du ein Profi im Umgang mit FireMonkey und VCL bist. Find ich toll das so einer mir hilft

P.P.S: Vllt. kannst du mir ja einen Rat noch mit auf den Weg geben. Glaubst du XE5 ist in Ordnung und wäre eine neuere Version besser. (Neuer bedeutet ja nicht gleich besser, ne? )

Geändert von onepiecefreak2 (21. Aug 2014 um 07:18 Uhr)
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.487 Beiträge
 
Delphi 12 Athens
 
#6

AW: Bitmaps in Transparenz ausblenden lassen

  Alt 21. Aug 2014, 12:02
Also ich weiß nicht ob ich gerade auf der Leitung stehe oder nicht, aber irgndwie komm ich nicht hinterher.

Aber ich versuche es:
"C" wird im Quellcode erstellt, als ein TBitmap.
Dieses bekommt als Inhalt den Hintergrund.
Nun wird das halbtransparente Bild auf "C" gezeichnet und schrittweise ausgegeben.

Habe ich das richtig zusammengefasst?
Beim Umblenden gibst du ein Mischbild aus "A" und "C" aus.
D = A * ((1 - x) + C * x
Wobei x schrittweise von 0,0 zu 1,0 erhöht wird.
  Mit Zitat antworten Zitat
onepiecefreak2

Registriert seit: 13. Jun 2014
50 Beiträge
 
#7

AW: Bitmaps in Transparenz ausblenden lassen

  Alt 21. Aug 2014, 13:39
Achso, jetzt verstehe ich wie das funktionieren soll.

Ist eigentlich auch keine dumme Idee. Vllt. auch die einzige Möglichkeit mit "Nur-Delphi" Code das hinzukriegen ^^.

Dennoch Blup werde ich erstmal die Möglichkeit von Harry Stahl versuchen umzusetzen. Da ich schon mit Firemonkey gearbeitet habe und nun rausfand, dass ich das auch für VLC benutzen kann, wird die Opacity-Eigenschaft sicher alles zu meiner Zufriedenheit richten. Wenn nicht komme ich auf deins zurück

Dank' fürs Helfen!
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.688 Beiträge
 
Delphi 2007 Enterprise
 
#8

AW: Bitmaps in Transparenz ausblenden lassen

  Alt 21. Aug 2014, 16:59
dass ich das auch für VLC benutzen kann,
VLC ist ein ziemlich guter Video-Player
Und auch die VCL wäre hier im Falschen zusammenhang, denn genau das geht nicht: VCL und Firemonkey mischen! (Zumindest nicht ohne diverse Tricks und Umwege und Abstriche.) Du möchtest Firemonkey für ein Windows-Programm benutzen; ein Windows-Programm ist aber noch lange nicht automatisch ein Programm auf Basis der VCL.
Nur um das mal zu klären. Hat jetzt keine Auswirkungen. Weitermachen mit Dienst
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Benutzerbild von Harry Stahl
Harry Stahl

Registriert seit: 2. Apr 2004
Ort: Bonn
2.558 Beiträge
 
Delphi 12 Athens
 
#9

AW: Bitmaps in Transparenz ausblenden lassen

  Alt 21. Aug 2014, 17:33
Dennoch Blup werde ich erstmal die Möglichkeit von Harry Stahl versuchen umzusetzen. Da ich schon mit Firemonkey gearbeitet habe und nun rausfand, dass ich das auch für VLC benutzen kann, wird die Opacity-Eigenschaft sicher alles zu meiner Zufriedenheit richten. Wenn nicht komme ich auf deins zurück

Dank' fürs Helfen!
Leider kann man nicht einfach so VCL und FMX in einer Form mischen (geht zwar, aber nur mit Tricks bzw. mit Extra-Sofware, z.B. "HYDRA" von RemObjects).

Ich weiß ja nicht genau, wie und in welchem Zusammenhang die Funktion konkret in Deinem Projekt benötigt wird. Wenn man das auslagern kann, in einen Extra-Dialog, dann könntest Du diesen Dialog als FireMonkey-Dialog gestalten und in eine DLL-Datei verlagern und dann von der VCL-Anwendung aus die den FMX-Dialog aus der DLL aufrufen. Wie so etwas geht, habe ich hier schon einmal beschrieben: http://www.devpage.de/blog/firemonkey.htm, auch in einem kurzen Video kann man das sich ansehen: https://www.youtube.com/watch?v=MnqPmX3yJBM).

Generell sollte man aber abwägen, welchen Aufwand man betreiben will. Ist Dein Programm im Prinzip schon fertig und nur dieser Punkt ist offen, würde ich die VCL-Lösung ohne FMX fertig stellen, das Ausblenden einer Bitmap ist auch unter VCL machbar, man braucht da aber schon ein wenig mehr Kenntnisse in der Grafikprogrammierung, wenn man das mit einem Windows-Bitmap lösen möchte.

Ergänzend möchte ich noch erwähnen, dass man mit FMX neben IOS- und Android-Programme nicht nur Windows-Programme entwickeln kann, sondern auch Programme für MAC OS X.
  Mit Zitat antworten Zitat
onepiecefreak2

Registriert seit: 13. Jun 2014
50 Beiträge
 
#10

AW: Bitmaps in Transparenz ausblenden lassen

  Alt 21. Aug 2014, 18:51
Achso... ok.

Danke für die ausführlichen Erklärungen. Nun um das mal aufzudecken, ich will eine Textadventureeditor bauen. Vllt. kennt ihr Spiele wie Professor Layton oder Phoenix Wright? Das in etwa soll mein Programm als Editor bereitstellen um sich eigenen Storylines zu kreieren. Dieser Editor kommt mit allen Storys der Phoenix Wright und Professor Layton-Reihe, um dem Konsumenten auch am PC die Schönheit dieser Spiele zu schenken.

Zurück zum Thema, das Ein- und Ausblenden von Sprites sowie Aufblitzen von diesen, ist ein wichtiger Bestandteil dieser Spiele. Um es klar zu sagen, diese "Technik" macht ca. 50% des "Grafikerlebnisses" aus. (die anderen 50% sind die Texte, dessen Farben und die Story)

Ich werde demnach den Aufwand machen und mal diese DLL zusammenfriemeln. Ich bin gut im Nachmachen von Dingen aus YouTube-Videos .

P.S: Habe nun dein Demoprogramm runtergeladen und habe mich dazu entschlossen mein Programm direkt in Firemonkey zu programmieren.

Damit ist das Thema beendet. Danke für die Hilfe und bis zum nächsten Mal!

Geändert von onepiecefreak2 (22. Aug 2014 um 06:37 Uhr)
  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 04:40 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