CreateImage und #PB_Image_Transparent

Anfängerfragen zum Programmieren mit PureBasic.
Schranz0r
Beiträge: 22
Registriert: 11.09.2013 19:09

CreateImage und #PB_Image_Transparent

Beitrag von Schranz0r »

Ich habe diesen Code hier:

Code: Alles auswählen

;Gadget's
#Gadget_Scroll = 0
#Gadget_Font = 1
;Image's
#Font_Image = 1

;Font's
#Font = 1


Define Font_Height = 24
Define text_height, text_width
text_height = Font_Height*1.5 
text_width = Font_Height*1.4

InitSprite()



If OpenWindow(0, 0, 0, 500, 500, "Font-System", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  
  
  
  ButtonGadget(2,5,5,60,20,"Save Font")
  
  
  
  UsePNGImageDecoder()
  UsePNGImageEncoder()
  
  LoadFont(#Font, "Arial", Font_Height,#PB_Font_HighQuality)
  
  CreateImage(#Font_Image,16*text_width,16*text_height,32, #PB_Image_Transparent)

  StartDrawing(ImageOutput(#Font_Image))
    DrawingMode(#PB_2DDrawing_Transparent)
    DrawingFont(FontID(#Font))
    
    For y = 0 To 15
      For x = 0 To 15  
          
        DrawText(x*text_width,y*text_height, Chr(x + (y * 16)),RGBA(255,0,0,255))
          
      Next 
    Next
    
  StopDrawing()
  
  
  ScrollAreaGadget(#Gadget_Scroll,100,0,400,400,16*text_width,16*text_height,1)
    ImageGadget(#Gadget_Font,0,0,16*text_width,16*text_height,ImageID(#Font_Image)) 
  CloseGadgetList()


  Repeat 
    
    Event = WaitWindowEvent() 
    
    Select Event
        
      Case #PB_Event_Repaint
        
      Case #PB_Event_Gadget
      If EventGadget() = 2
        SaveImage(#Font_Image,"testfont.png",#PB_ImagePlugin_PNG,0,32)
      EndIf
        
        
    EndSelect
    
  Until Event = #PB_Event_CloseWindow
  
EndIf
Probleme macht mir hier : #PB_Image_Transparent
Lasse ich das weg, wird mein Image mit schwarzen Hintergrund gezeichnet, wenn nicht bekomm ich nix zu sehen....
Hab schon einige Kombinationen ausprobiert, komme zu keinen Ergebnis.

:coderselixir:
Zuletzt geändert von Schranz0r am 27.09.2013 12:45, insgesamt 1-mal geändert.
Benutzeravatar
KeyKon
Beiträge: 1412
Registriert: 10.09.2004 20:51
Computerausstattung: Laptop: i5 2,8 Ghz, 16GB DDR3 RAM, GeForce 555GT 2GB VRAM
PC: i7 4,3 Ghz, 32GB DDR3 RAM, GeForce 680 GTX 4GB VRAM
Win10 x64 Home/Prof
PB 5.30 (64bit)
Wohnort: Ansbach
Kontaktdaten:

Re: CreateImage und #PB_Image_Transparent

Beitrag von KeyKon »

Du malst mit einer komplett unsichtbaren Farbe?
RGBA(255,0,0,0)

Wozu eigentlich das InitSprite()?

LG KeyKon
(\/) (°,,,°) (\/)
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8807
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: CreateImage und #PB_Image_Transparent

Beitrag von NicTheQuick »

Ich dachte auch erst, dass es an der transparenten Farbe liegt, aber das ändert bei mir hier auch nichts, wenn ich Alpha auf 255 oder 127 stelle.

Mit einem CanvasGadget bekomme ich sogar deinen Invalid Memory Acces.
Schranz0r
Beiträge: 22
Registriert: 11.09.2013 19:09

Re: CreateImage und #PB_Image_Transparent

Beitrag von Schranz0r »

Wie gesagt hab da schon in alle Himmelsrichtungen gespielt, der Code ist jetzt so wie ich ihn "hinterlassen" habe :)

Änder es aber oben nochmal ab um verwirrung zu vermeiden!
Benutzeravatar
KeyKon
Beiträge: 1412
Registriert: 10.09.2004 20:51
Computerausstattung: Laptop: i5 2,8 Ghz, 16GB DDR3 RAM, GeForce 555GT 2GB VRAM
PC: i7 4,3 Ghz, 32GB DDR3 RAM, GeForce 680 GTX 4GB VRAM
Win10 x64 Home/Prof
PB 5.30 (64bit)
Wohnort: Ansbach
Kontaktdaten:

Re: CreateImage und #PB_Image_Transparent

Beitrag von KeyKon »

Tatsache, ich hab so das Gefühl, dass keine der nicht Alpha-Blend Zeichenoperationen bei einem 32-bit Image funktionieren.
Ich kann nicht mal ne Box im Default-Mode zeichnen, im AlphaBlend-Mode geht es aber einwandfrei...

Daher kannst du dein Problem auf jeden Fall so lösen:

Code: Alles auswählen

    DrawingMode(#PB_2DDrawing_AlphaBlend)
    
    DrawingFont(FontID(#Font))
    
    For y = 0 To 15
      For x = 0 To 15  
          
        DrawText(x*text_width,y*text_height, Chr(x + (y * 16)),RGBA(255,0,0,255),RGBA(0,0,0,0))
          
      Next 
    Next
    
  StopDrawing()
Ob das andere jetzt ein Bug ist, oder eine nicht dokumentierte Inkompatibilität ist eine andere Frage^^

LG KeyKon
(\/) (°,,,°) (\/)
Schranz0r
Beiträge: 22
Registriert: 11.09.2013 19:09

Re: CreateImage und #PB_Image_Transparent

Beitrag von Schranz0r »

Super, dank dir!

Komisch das es anders nicht funzt, aber was will man machen :)
Bug?!
Benutzeravatar
KeyKon
Beiträge: 1412
Registriert: 10.09.2004 20:51
Computerausstattung: Laptop: i5 2,8 Ghz, 16GB DDR3 RAM, GeForce 555GT 2GB VRAM
PC: i7 4,3 Ghz, 32GB DDR3 RAM, GeForce 680 GTX 4GB VRAM
Win10 x64 Home/Prof
PB 5.30 (64bit)
Wohnort: Ansbach
Kontaktdaten:

Re: CreateImage und #PB_Image_Transparent

Beitrag von KeyKon »

Naja gut wenn man ehrlich ist braucht man das Transparent oder das Default Drawing nicht.
Man kann ja alles AlphaBlenden, notfalls halt ohne Transparenz, die einzige Frage ist dann höchstens noch ob die Performance genauso gut ist wie bei Default.
(\/) (°,,,°) (\/)
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7028
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: CreateImage und #PB_Image_Transparent

Beitrag von STARGÅTE »

Wegen Performance, du kannst auch #PB_2DDrawing_AllChannels nutzen, dann wird die RGBA-Farbe 1:1 in das Image übertragen ohne Blend oder sonst was, also ein einfaches copy&paste, was sehr schnell ist.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
Bisonte
Beiträge: 2465
Registriert: 01.04.2007 20:18

Re: CreateImage und #PB_Image_Transparent

Beitrag von Bisonte »

hmmm das bei 32Bit Images ohne die 'PB_2DDrawing_Alpha.... Sachen nichts zu sehen ist, war doch schon immer so... oder irre ich mich da ?
Wobei man natürlich sicherstellen sollte, dass RGBA als Farbe genommen wird und nicht RGB. (Betonung auf das A ;) )

Aber beim obigen code aus :
DrawingMode(#PB_2DDrawing_Transparent)
ein :
DrawingMode(#PB_2DDrawing_AlphaBlend|#PB_2DDrawing_Transparent)
gemacht und es ist gesehen worden ...
PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom​​
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8807
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: CreateImage und #PB_Image_Transparent

Beitrag von NicTheQuick »

Bisonte hat geschrieben:hmmm das bei 32Bit Images ohne die 'PB_2DDrawing_Alpha.... Sachen nichts zu sehen ist, war doch schon immer so... oder irre ich mich da ?
Wobei man natürlich sicherstellen sollte, dass RGBA als Farbe genommen wird und nicht RGB. (Betonung auf das A ;) )

Aber beim obigen code aus :
DrawingMode(#PB_2DDrawing_Transparent)
ein :
DrawingMode(#PB_2DDrawing_AlphaBlend|#PB_2DDrawing_Transparent)
gemacht und es ist gesehen worden ...
Ohje, Hilfe lesen hilft doch immer wieder. :lol:
Antworten