Seite 1 von 1

Plot mit Alpha-Kanal

Verfasst: 06.01.2007 16:23
von remi_meier
Ich bin mir nicht sicher, wie sicher das ist, aber es läuft. Jemand der mehr
weiss, oder mehr Zeit hat alles nachzulesen, kann es gerne erweitern.

Wieso unterstützt Fred eigentlich DrawingBuffer() nicht auch für Images?

Code: Alles auswählen

Procedure StartBuffered(img)
  Shared _buf.l, _line.l
  Protected dib.DIBSECTION
	
  getobject_(ImageID(img), SizeOf(DIBSECTION), @dib)
	_buf  = dib\dsBm\bmBits 
	_line = dib\dsBm\bmWidthBytes 
  
  ProcedureReturn _buf
EndProcedure

Procedure BPoint(x, y)
  Shared _buf.l, _line.l
  
  ProcedureReturn PeekL(_buf + y * _line + x * 4)
	
  ProcedureReturn 0
EndProcedure

Procedure BPlot(x, y, Col.l)
  Shared _buf.l, _line.l
  
  ProcedureReturn PokeL(_buf + y * _line + x * 4, Col)
	
  ProcedureReturn 0
EndProcedure


If OpenWindow(0, 100, 100, 500, 300, "PureBasic - Image")
  
  CreateImage(0, 500, 300, 32)
  img = CreateImage(#PB_Any, 500, 300, 32) ; ,32) ist wichtig!
  
  
  StartBuffered(img)
  For x = 0 To 499
    For y = 0 To 299
      BPlot(x, y, RGB(0, 0, 255) | (Int(x / 499.0 * $FF) << 24))
    Next  
  Next
  
  StartDrawing(ImageOutput(0))
  Box(300, 0, 200, 100, $FF)
  Box(150, 100, 100, 100, $FF00)
  Box(200, 200, 120, 100, $FF0000)
  DrawAlphaImage(ImageID(img), 0, 0)
  StopDrawing()
  
  CreateGadgetList(WindowID(0))
  ImageGadget(0, 0, 0, 500, 300, ImageID(0))
  
  Repeat
    EventID = WaitWindowEvent()
    
    
  Until EventID = #PB_Event_CloseWindow  ; If the user has pressed on the close button
  
EndIf

End   ; All the opened windows are closed automatically by PureBasic
Bitte noch nicht in Projekten nutzen!

Verfasst: 06.01.2007 16:56
von DarkDragon
Zeig mal bitte wie es aussehen sollte. Hier ist nämlich nichts transparentes zu sehen.

[EDIT]

Ok, hab den Farbverlauf gesehen, aber hab n kleines Problem damit. Setz mal das Farbverlauf Bild auf das ImageGadget. Es ist nichtmal ansatzweise n Farbverlauf zu erkennen :freak: . Dacht jetzt du hättest schon ne Methode gefunden das ganze auch speicherbar als Bild und im ImageGadet, ... anzeigbar zu machen.

Verfasst: 06.01.2007 17:21
von Kaeru Gaman
DarkDragon hat geschrieben:... speicherbar ...
ich hab die tage erst gelesen, dass der integrierte encoder das wohl garnicht leistet....

also, speicherbar ist das objekt an sich bestimmt,
aber dann musst du wohl deinen eigenen png-encoder schreiben....

Verfasst: 06.01.2007 17:26
von remi_meier
@DD: Hast du den Farbverlauf UND die Objekten darunter gesehen?

kA wie du das mit dem Imagegadget meinst, also dass ein Image direkt
auf das Fenster gezeichnet wird und somit das Gadget auch durchsichtig
wäre?

@KG: Jap, speichern geht nicht. PB ist mit Alpha-Zeugs eh noch zu doof
für eine Art Malprogramm, grad mal Öffnen und Anzeigen gehen. Aber
ich denke, man könnte relativ einfach eine Lib dazu einbinden.

Verfasst: 06.01.2007 19:06
von DarkDragon
remi_meier hat geschrieben:@DD: Hast du den Farbverlauf UND die Objekten darunter gesehen?

kA wie du das mit dem Imagegadget meinst, also dass ein Image direkt
auf das Fenster gezeichnet wird und somit das Gadget auch durchsichtig
wäre?
Ja die Objekte hab ich gesehen. Ich dachte nur es ginge vielleicht um Transparenz bei Fenstern und um das Abspeichern, ...:

ImageGadget(0, 0, 0, 500, 300, ImageID(img))

Mach das mal anstelle von

ImageGadget(0, 0, 0, 500, 300, ImageID(0))

Und da ist kein Verlauf mehr da.

@KG:
Jo, dacht halt das hätt remi_meier gelöst oder so.

[EDIT]
Btw.: Ich finde die ganzen Komprimier-Algos ein wenig unübersichtlich und komm mit den Beschreibungen nie zurecht. Desshalb interessiert mich manchmal wie Fred den PNG/JPG en/decoder hinbekommen hat.

Verfasst: 07.01.2007 00:43
von remi_meier
Glaub der benutzt ne Lib. Libpng oder so.

Verfasst: 10.01.2007 08:49
von Kaeru Gaman
...was ja wieder bedeuten würde,
wenn wir ihm ne anständige Lib besorgen, die er auch benutzen darf,
dann würde PB das in zukunft leisten können...

Verfasst: 10.01.2007 14:18
von remi_meier
Nö, er ist nur zu faul :mrgreen:
(bzw. hat wichtigeres zu tun)