AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi [NonVCL] AlphaTransparentverläufe richtig darstellen
Thema durchsuchen
Ansicht
Themen-Optionen

[NonVCL] AlphaTransparentverläufe richtig darstellen

Ein Thema von NickelM · begonnen am 3. Sep 2011 · letzter Beitrag vom 17. Sep 2011
Antwort Antwort
NickelM

Registriert seit: 22. Jul 2007
Ort: Carlsberg
445 Beiträge
 
Delphi 2009 Professional
 
#1

[NonVCL] AlphaTransparentverläufe richtig darstellen

  Alt 3. Sep 2011, 01:43
Hi,
Ich bin gerade dabei in NonVCL ein PNG mit Alpha-Transparent (auch verläufe) darzustellen.
Durchs google und Delphi Hilfe welzen bin ich auf die Funktion AlphaBlend gekommen.
So nun hab ich das PNG mit der TPNGImage klasse geladen (da ich kein bok auf selber schreiben habe und von stream lade) und versucht das in BMP umzuwandeln. In VCL weis ich das es geht, da ich es schonmal hinbekommen habe. Nur in NonVCL mag er mir das nicht so wie ich das will

So nun der Code wie ich das Png in ein Bitmap umwandle:
Delphi-Quellcode:
    BildMem := TMemoryStream.Create;
    BildMem.SetSize(FileSize);
    FileStream.Read(BildMem.Memory^,FileSize);
    try
      case BildType of
      btPng:
        begin
        Png := TPngImage.Create;
        try
          Png.LoadFromStream(BildMem);
          //Bilder ist ein Array von einem Typ den ich schon erzeugt habe und vom Typ TBitmap ist
          Bilder[SkinTeil].SetSize(Png.Width,Png.Height);
          Bilder[SkinTeil].PixelFormat := pf32bit;
          Bilder[SkinTeil].AlphaFormat := afDefined; //afPremultiplied macht kein Unterschied und weglassen gehts garnicht.
          Bilder[SkinTeil].Canvas.Draw(0,0,Png);
        finally
          Png.Free;
        end;
So versuche ich das Bitmap nun zuzeichnen:
Delphi-Quellcode:
var Blend : BLENDFUNCTION;
begin
            Blend.BlendOp := 0;
            Blend.BlendFlags := 0;
            Blend.SourceConstantAlpha := 255;
            Blend.AlphaFormat := AC_SRC_ALPHA;
            BitBlt(hdc,0,0,30,30,Bilder[skFormBildMain].Canvas.Handle,120, 100,SRCCOPY);//Hintergrundbild
            AlphaBlend(hdc,0,0,Bilder[skBMiniHotlight].Width,Bilder[skBMiniHotlight].Height,
            Bilder[skBMiniHotlight].Canvas.Handle,0,0,
            Bilder[skBMiniHotlight].Width,Bilder[skBMiniHotlight].Height,Blend);
end;
Soweit funkt das in Windowx XP perfekt. Wenn ich jetzt das in Windows 7 teste, ob 32/64 bit egal,
macht er mir die Transparentefläche weis (bzw. weis in die Transparentfarbe verlaufend)...hmm..hab jetzt unter 2 Win7 und 1 XP (XP ist von mit und Win7 Virtual Maschiene) und es kommt zu diesem Fehler.

Hab schon versucht AlphaFormat von Blend nicht zu setzten oder ConctantAlpha auf 200 oder so macht kein unterschied...eher wird in XP alles Transparenter gezeichnet, ist ja logisch, so wie ich das verstanden hab ist Constant der Hellste wert oder?

Hoffe mir kann jemand einen Alternative sagen, wie ich das ohne, falls möglich, zusätzlichen Units machen kann.

Gruß NickelM
Nickel
"Lebe und denke nicht an morgen"
Zitat aus dem gleichnamigen Bollywoodfilm.
  Mit Zitat antworten Zitat
NickelM

Registriert seit: 22. Jul 2007
Ort: Carlsberg
445 Beiträge
 
Delphi 2009 Professional
 
#2

AW: [NonVCL] AlphaTransparentverläufe richtig darstellen

  Alt 4. Sep 2011, 20:38
*push*
Nickel
"Lebe und denke nicht an morgen"
Zitat aus dem gleichnamigen Bollywoodfilm.
  Mit Zitat antworten Zitat
NickelM

Registriert seit: 22. Jul 2007
Ort: Carlsberg
445 Beiträge
 
Delphi 2009 Professional
 
#3

AW: [NonVCL] AlphaTransparentverläufe richtig darstellen

  Alt 6. Sep 2011, 10:26
*push*
Keiner ne Ahnung, wie Windows das macht so dass es auch unter Windows 7 funkt?
Nickel
"Lebe und denke nicht an morgen"
Zitat aus dem gleichnamigen Bollywoodfilm.
  Mit Zitat antworten Zitat
Benutzerbild von Memnarch
Memnarch

Registriert seit: 24. Sep 2010
737 Beiträge
 
#4

AW: [NonVCL] AlphaTransparentverläufe richtig darstellen

  Alt 6. Sep 2011, 13:56
schön wäre auch wenn du ein compilat zum selbsttesten hochladen könntest .

Mal ganz davon abgesehen hatte ich noch nie probleme. Wobei ich in bezug auf alphaBlend nur 32bit Bitmaps mit alphachannel genutzt habe.

Oh:

Bilder[SkinTeil].Canvas.Draw(0,0,Png); Da wird deine Alphatransparenz wahrscheinlich flöten gehen weil DRAW es wohl verschluckt(jenachdem wie es von tbitmap implementiert wird).

Versuch mal als gegentest direkt von einer bitmap zu laden(32bit, mit alphachannel)
Da man Trunc nicht auf einen Integer anwenden kann, muss dieser zuerst in eine Float kopiert werden
  Mit Zitat antworten Zitat
NickelM

Registriert seit: 22. Jul 2007
Ort: Carlsberg
445 Beiträge
 
Delphi 2009 Professional
 
#5

AW: [NonVCL] AlphaTransparentverläufe richtig darstellen

  Alt 6. Sep 2011, 16:51
Hm naja, das komsiche ist ja in XP geht es ja...also scheint Draw es ja zuübernehemn, aber warum in Windows 7 nicht. Da ist es weis. Das ist was ich nicht verstehe. TBitmap wird doch vom Delphi gemacht also eigentlich doch nicht Betriebssystemabhängig oder? Naja es werden WinAPIs aufgerufen, aber warum sollte in Windows7 das anders sein als in WinXP?
Nickel
"Lebe und denke nicht an morgen"
Zitat aus dem gleichnamigen Bollywoodfilm.
  Mit Zitat antworten Zitat
Benutzerbild von Memnarch
Memnarch

Registriert seit: 24. Sep 2010
737 Beiträge
 
#6

AW: [NonVCL] AlphaTransparentverläufe richtig darstellen

  Alt 6. Sep 2011, 18:58
MAch dochmal bitte einen gegentest direkt mit einer bmp 32bit alphatransparenz
(interressiert mich jetz mal)

und etwas für alle zum testen wäre auch nicht schlecht^^
Da man Trunc nicht auf einen Integer anwenden kann, muss dieser zuerst in eine Float kopiert werden
  Mit Zitat antworten Zitat
NickelM

Registriert seit: 22. Jul 2007
Ort: Carlsberg
445 Beiträge
 
Delphi 2009 Professional
 
#7

AW: [NonVCL] AlphaTransparentverläufe richtig darstellen

  Alt 17. Sep 2011, 17:55
Hm okay ich stell mal ein PNG rein, welches Alphatransparenz hat.
Versuch mal ob dus hinbekommst.
Angehängte Grafiken
 
Nickel
"Lebe und denke nicht an morgen"
Zitat aus dem gleichnamigen Bollywoodfilm.
  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 17:51 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