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
Seite 1 von 2  1 2      
onepiecefreak2

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

Bitmaps in Transparenz ausblenden lassen

  Alt 19. Aug 2014, 22:25
Hallo meine Gutsten,

also ich habe nun ein 32bit Bitmap. Dieses hat eine 50%ige Transparenz, ist also genau halbdurchsichtig. Das hat sich nach einigem rumprobieren auch prima in 'nem TImage anzeigen lassen. Genauso wie ich es brauchte. Nun hängt mein Projekt nur noch von einer Sache ab: Dem Ausblenden dieses Bitmaps in komplette Transparenz.

Ich habe mich mehrere Tage dumm und dusselig gesucht und viele Codes gefunden, die mich meiner Lösung immer nur ganz nah brachten. Schlussendlich waren sie aber nicht für das Ausblenden gedacht, das ich gesucht habe.

Ich habe es über die RGBA-Werte versucht. Mithilfe von ScanLine und subtrahieren des Alphawerts. Irgendwo hing es immer daran, dass das Bild nicht ausgeblendet wurde sondern einfach in seiner Ursprungsfarbe blieb (um es so auszudrücken: Nach Ausführen des Codes hat das Bild seine Transparenz verloren und bekam sie nie wieder, selbst nach etlichen Möglichkeiten ihr die Eigenschaft Transparent wieder auf true zu setzen oder das Alphaformat des Bitmaps zu ändern), sozusagen würde ein halbtransparentes schwarz zu einem normalen schwarz ohne irgendwelche Transparenz werden.

Ich suche also einen Code oder (hoffentlich mir noch unbekannte) Hilfeartikel aus anderen Foren oder Hilfeseiten, die mir bei der Lösung helfen können.

Wie gesagt ein halbtransparentes Bild soll komplett transparent werden und das in einem Ausblendeffekt!

Puhh, das war eine Menge Text. Ich hoffe ihr könnt mir helfen.

P.S: Ich habe die Bitmap angehangen. (Eigentlich sind es 2, aber sie haben die gleiche Transparenzstufe. Bis auf die Farbe haben sie alles gleich )
Angehängte Grafiken
Dateityp: jpg Test.jpg (1,7 KB, 22x aufgerufen)
Dateityp: jpg Test2.jpg (1,7 KB, 20x aufgerufen)

Geändert von onepiecefreak2 (19. Aug 2014 um 22:28 Uhr)
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.685 Beiträge
 
Delphi 2007 Enterprise
 
#2

AW: Bitmaps in Transparenz ausblenden lassen

  Alt 20. Aug 2014, 02:01
Die GDI, auf die TBitmap mitsamt Canvas aufsetzt, ist nur in Teilen "alpha-fähig". Mit viel Fummelei und Vermeidung mancher Funktionen lässt sich da zwar etwas deichseln, aber ich halte das für hässliche Frickelei. Du würdest erheblich komfortabler mit einer Gafik-Lib leben, die Transparenz durch und durch vorsieht. Ich empfehle hier sehr gerne immer die Graphics32 Lib, die zudem auch noch ziemlich flott ist (ja, auch .Pixels[]-Aufrufe) und eine ganze Reihe an nützlichen Zusatzfunktionen bietet. Es gäbe auch noch die GDI+, diese ist aber auch schon wieder abgekündigt und ich fand den Umgang damit irgendwie immer sehr "klobig".

PS: (Baseline) JPEG unterstützt ebenfalls keine Alphakanäle
"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
onepiecefreak2

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

AW: Bitmaps in Transparenz ausblenden lassen

  Alt 20. Aug 2014, 11:24
Danke für deine Antowrt.
In manchen von diesen Artikeln habe ich auch schon GID+ gelesen. Allerdings habe ich erstmal nach "Nur-Delphi" Code gesucht. Ist der Umgang mit Graphics32 Lib sehr schwer?

Ich werde mich gleich mal nach Tutorials umsehen. Hoffentlich wird das was.

Aber wie gesagt, Bitmaps in einem Image habe ich transparent bekommen. Ich habe sie eben nicht ausblenden lassen können ohne das die ihr "gottverfluchte" Transparenz verlieren.

Ich hoffe aufs Beste. Bis bälde.

P.S: Warum sind die Bilder plötzlich im jpg Format o.O . Eigentlich sollten das bmp's sein... sry for that

P.P.S: Ich schreibe gerade von Arbeit daher kann ich die bmp's gerade nicht nachladen. Sollte sie jemand wollen, einfach nachfragen.

Geändert von onepiecefreak2 (20. Aug 2014 um 11:27 Uhr)
  Mit Zitat antworten Zitat
Blup

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

AW: Bitmaps in Transparenz ausblenden lassen

  Alt 20. Aug 2014, 14:19
Ausgangssituation:
Bitmap "A" Hintergrund
Bitmap "B" Vordergrund mit transparenten Bereichen

- eine neue Bitmap "C" als Kopie von "A" erzeugen
- "B" transparent auf "C" zeichnen
- "C" anzeigen und schrittweise auf "A" umblenden (oder umgekehrt)
  Mit Zitat antworten Zitat
onepiecefreak2

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

AW: Bitmaps in Transparenz ausblenden lassen

  Alt 20. Aug 2014, 18: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.530 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Bitmaps in Transparenz ausblenden lassen

  Alt 20. Aug 2014, 21: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 23:45 Uhr) Grund: Korrektur
  Mit Zitat antworten Zitat
onepiecefreak2

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

AW: Bitmaps in Transparenz ausblenden lassen

  Alt 20. Aug 2014, 22: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 22:32 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Harry Stahl
Harry Stahl

Registriert seit: 2. Apr 2004
Ort: Bonn
2.530 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: Bitmaps in Transparenz ausblenden lassen

  Alt 21. Aug 2014, 00: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.
Miniaturansicht angehängter Grafiken
blend.jpg  
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
 
#9

AW: Bitmaps in Transparenz ausblenden lassen

  Alt 21. Aug 2014, 08: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 08:18 Uhr)
  Mit Zitat antworten Zitat
Blup

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

AW: Bitmaps in Transparenz ausblenden lassen

  Alt 21. Aug 2014, 13: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
Antwort Antwort
Seite 1 von 2  1 2      

 

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 10:27 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