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
Benutzerbild von Harry Stahl
Harry Stahl

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

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
 
#2

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
 
#3

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
 
#4

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
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 07:32 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