Plot mit Alpha-Kanal

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Benutzeravatar
remi_meier
Beiträge: 1078
Registriert: 29.08.2004 20:11
Wohnort: Schweiz

Plot mit Alpha-Kanal

Beitrag 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!
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Beitrag 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.
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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....
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
remi_meier
Beiträge: 1078
Registriert: 29.08.2004 20:11
Wohnort: Schweiz

Beitrag 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.
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Beitrag 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.
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Benutzeravatar
remi_meier
Beiträge: 1078
Registriert: 29.08.2004 20:11
Wohnort: Schweiz

Beitrag von remi_meier »

Glaub der benutzt ne Lib. Libpng oder so.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
remi_meier
Beiträge: 1078
Registriert: 29.08.2004 20:11
Wohnort: Schweiz

Beitrag von remi_meier »

Nö, er ist nur zu faul :mrgreen:
(bzw. hat wichtigeres zu tun)
Antworten