Seite 1 von 1

CreateImage und #PB_Image_Transparent

Verfasst: 27.09.2013 11:28
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:

Re: CreateImage und #PB_Image_Transparent

Verfasst: 27.09.2013 12:27
von KeyKon
Du malst mit einer komplett unsichtbaren Farbe?
RGBA(255,0,0,0)

Wozu eigentlich das InitSprite()?

LG KeyKon

Re: CreateImage und #PB_Image_Transparent

Verfasst: 27.09.2013 12:41
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.

Re: CreateImage und #PB_Image_Transparent

Verfasst: 27.09.2013 12:44
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!

Re: CreateImage und #PB_Image_Transparent

Verfasst: 27.09.2013 12:47
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

Re: CreateImage und #PB_Image_Transparent

Verfasst: 27.09.2013 12:52
von Schranz0r
Super, dank dir!

Komisch das es anders nicht funzt, aber was will man machen :)
Bug?!

Re: CreateImage und #PB_Image_Transparent

Verfasst: 27.09.2013 12:56
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.

Re: CreateImage und #PB_Image_Transparent

Verfasst: 27.09.2013 13:17
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.

Re: CreateImage und #PB_Image_Transparent

Verfasst: 27.09.2013 13:32
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 ...

Re: CreateImage und #PB_Image_Transparent

Verfasst: 27.09.2013 15:44
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: