Canvas screenshot

Übersicht BlitzMax, BlitzMax NG Allgemein

Neue Antwort erstellen

 

X0r

Betreff: Canvas screenshot

BeitragMo, Mai 08, 2006 13:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo. Da die Grafikprogrammierung in BM ja nicht mehr mit buffers funktioniert, wollte ich wissen, wie man eigentlich einen screenshot von einem canvas machen kann.
Ich habe gehört, dass es mit pixmaps geht, aber ich kenne mich mit pixmaps gar nicht aus. Kann mir einer ein example schreiben, bei dem ich pixels auf einem canvas zeichnen kann und dann einen screenshot vom canvas machen kann.

Danke im voraus.

D2006

Administrator

BeitragMo, Mai 08, 2006 14:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Geh doch ins englische Board, die magst du doch eh viel lieber.

Rolling Eyes
Intel Core i5 2500 | 16 GB DDR3 RAM dualchannel | ATI Radeon HD6870 (1024 MB RAM) | Windows 7 Home Premium
Intel Core 2 Duo 2.4 GHz | 2 GB DDR3 RAM dualchannel | Nvidia GeForce 9400M (256 MB shared RAM) | Mac OS X Snow Leopard
Intel Pentium Dual-Core 2.4 GHz | 3 GB DDR2 RAM dualchannel | ATI Radeon HD3850 (1024 MB RAM) | Windows 7 Home Premium
Chaos Interactive :: GoBang :: BB-Poker :: ChaosBreaker :: Hexagon :: ChaosRacer 2
 

Dreamora

BeitragMo, Mai 08, 2006 15:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Um einen Screenshot von einem TGraphics (nicht canvas das ist ein GUI element das ein TGraphics hält) zu machen, musst du ein Pixmap grabben und dieses dann mittels savepixmap speichern.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Freeman

BeitragMo, Mai 08, 2006 15:26
Antworten mit Zitat
Benutzer-Profile anzeigen
so könnte man das zum Bleistift machen

Code: [AUSKLAPPEN]

Strict

Global window:tgadget=CreateWindow("test",0,0,400,500)
Global canvas:Tgadget=CreateCanvas(0,0,400,400,window)
 

While Not KeyDown(key_escape)
WaitEvent()

Select EventID()

Case event_windowclose
End

Case event_gadgetpaint
SetGraphics CanvasGraphics(canvas)
Cls

DrawLine 0,0,32,32
DrawLine 32,0,0,32
DrawOval 0,0,32,32

Local image:timage=CreateImage(32,32,1,DYNAMICIMAGE|MASKEDIMAGE)

GrabImage image,0,0


For Local i=1 To 100
DrawImage image,Rnd(640),Rnd(480)
Next
Local pixmap:TPixmap=GrabPixmap(0,0,400,400)

Flip
Local path:String=RequestFile("Speichern unter","png",True)
SavePixmapPNG(pixmap,path)
End
End Select
Wend


Fr3eMaN
 

X0r

BeitragMo, Mai 08, 2006 19:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Admin, was soll dieses Angemache?

Danke, freeman. Genau sowas meinte ich.
Und es ist ja wohl egal, ob ich es TCanvas nenne oder sonst was. Solange ihr mich versteht, wie freeman, ist alles inordnung.
 

Dreamora

BeitragMo, Mai 08, 2006 19:21
Antworten mit Zitat
Benutzer-Profile anzeigen
D's reaktion war eine Reaktion auf deine Reaktion auf die konstruktive Kritik zu deiner Page.
Nicht ganz objektiv, aber gleichartig wie deine ...
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
  • Zuletzt bearbeitet von Dreamora am Mo, Mai 08, 2006 19:29, insgesamt einmal bearbeitet
 

X0r

BeitragMo, Mai 08, 2006 19:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Das war. Vergisst es.
So, eine Frage noch:
Kann man das auch anders machen, mit dem "screenshot"? Nicht dass ich das jetzt zu schwer finde *wär ja gelacht*, aber ich will alle möglichkeiten wissen.

Außerdem, wie kann ich einem geladenen image einen Alpha Wert setzen? Geht das überhaupt?
Kann mir einer ein Programm schreiben, bei dem man mit ein Bild laden kann und dem dann ein Alpha Wert zugewiesen wird.
Danke.
 

Dreamora

BeitragMo, Mai 08, 2006 19:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Alpha auf Image:

SetBlend Alphablend
SetAlpha alphawert#

' Zeichenoperationen



Das mit dem Screenshot geht nicht wirklich anders mit BM eigenen Befehlen.
Es mag vielleicht ein Modul geben, das direkt den Backbuffer anzapft und die Daten in eine Pixmap kopiert, da das schneller ist als Grabben ... ansonsten wirst du dich wohl selbst in die DX API und OpenGL API reinarbeiten müssen um herauszufinden, wie das dann getan werden müsste.



PS: Genau diese Art von Reaktion ist das Problem. Wunder dich da bitte nicht, wenn die sonst immer helfenden sich auch entsprechend verhalten. (speziell bei den Aussagen in erwähntem Thread). Wir sind alle Menschen und die Leute die dir helfen und antworten, tun dies aus freien Stücken. Also behandel sie bitte künftig mit entsprechendem Respekt. Andernfalls wird es entsprechende Konsequenzen haben wegen Verletzen der Netiquette.
Dies ist lediglich ein gut gemeinter Rat.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
 

X0r

BeitragMo, Mai 08, 2006 20:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Was ist denn sinvoller für ein Grafikprogramm, eine Pixmap zu laden uns sie dann auf den Canvas zeichnen oder ein image normal zu laden und den dann zu zeichnen?
Image, oder? Mit pixmaps kann man keine Kollisionsabfrage machen, oder?
 

Dreamora

BeitragMo, Mai 08, 2006 20:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Images, ja. Zumindest bis zu nem gewissen Punkt.

Pixmap hat aber den Vorteil, dass du mittels Paste die Pixmap in eine andere beliebige Pixmap packen kannst.

Images müssen jedoch bei jedem Durchlauf neu gezeichnet werden.

Jedoch hast du recht, dass dann Kollisionen nicht mehr gehen, ausser du benötigst nur Rect Collision. Die braucht keine Images.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
 

X0r

BeitragMo, Mai 08, 2006 20:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Na toll. Dan bringen es Pixmaps garnicht. Was soll denn der Vorteil an ihnen sein? Dass sie so langsam sind?

Bis zu was für einem gewissen Punkt? Bitte genauer?
Und wozu sollen pixmaps, außer fürs speichern, in einem Grafikprogramm gut sein?

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group