Gambas-it

Gambas3 => Programmazione => Topic aperto da: vuott - 11 Marzo 2012, 01:17:33

Titolo: [Risolto] Generare un file immagine da una DrawingArea
Inserito da: vuott - 11 Marzo 2012, 01:17:33
...mi domandavo  ??? se, dopo aver effettuato dei disegni in una DrawingArea, sia possibile salvare il lavoro finale in un file immagine.
Titolo: Re: Generare un file immagine da una DrawingArea
Inserito da: fsurfing - 11 Marzo 2012, 21:24:50
mi pare di no , ti conviene disegnare su una picture , che poi applichi alla draw , così se devi salvarla cè l' hai già pronta, inoltre in alcuni casi conviene disegnare su una picture per aumentare la velocità , se si ha una "base" sempre uguale ed una parte che varia
Titolo: Re: Generare un file immagine da una DrawingArea
Inserito da: vuott - 11 Marzo 2012, 21:39:49
mi pare di no , ti conviene disegnare su una picture , che poi applichi alla draw , così se devi salvarla cè l' hai già pronta, inoltre in alcuni casi conviene disegnare su una picture per aumentare la velocità , se si ha una "base" sempre uguale ed una parte che varia

Uhmmmm... lo sospettavo.

Va be'... grazie molte, fsurfing, per il tuo sempre gradito intervento.

 :ciao:
Titolo: Re: [Risolto] Generare un file immagine da una DrawingArea
Inserito da: vuott - 05 Febbraio 2013, 16:49:41
Riprendo questa discussione, perché si può generare un file immagine da una DrawingArea seguendo queste fasi:

* disegno e/o scrivo nella DrawingArea;
*  creo il file PDF (http://www.gambas-it.org/wiki/index.php/Printer#Stampare_in_un_file_.pdf_o_.ps) mediante la proprietà .OutputFile della Classe Printer;
* utilizzando il file PDF, converto la pagina PDF in una Image (http://www.gambas-it.org/wiki/index.php/Codice_essenziale_per_mostrare_un_file_PDF) (è necessario attivare il componente gb.pdf);
* quindi salvo detta Image con il suo metodo .Save in un file immagine.  :)
Titolo: Re: [Risolto] Generare un file immagine da una DrawingArea
Inserito da: Top Fuel - 29 Marzo 2014, 22:23:44
Domanda: come faccio a collegare l'oggetto Printer ad una specifica DrawingArea? Ce ne potrebbero essere più di una, per esempio.
Titolo: Re: [Risolto] Generare un file immagine da una DrawingArea
Inserito da: vuott - 30 Marzo 2014, 01:17:42
Domanda: come faccio a collegare l'oggetto Printer ad una specifica DrawingArea? Ce ne potrebbero essere più di una, per esempio.

Io avrei scritto questo codice un po' rozzo... (ipotizziamo di avere due "DrawingArea"):
Codice: gambas [Seleziona]

Public Sub DrawingArea1_Draw()

With Paint
   .Brush = Paint.Color(Color.Red)
   .MoveTo(100, 100)
   .RelLineTo(0, 100)
   .Stroke
   .DrawText("DrawingArea1", 10, 10, 20, 20)
   .End
 End With
 
End

Public Sub DrawingArea2_Draw()

With Paint
   .Brush = Paint.Color(Color.Red)
   .MoveTo(200, 200)
   .RelLineTo(0, 200)
   .Stroke
   .DrawText("DrawingArea2", 200, 200, 20, 20)
   .End
 End With
  
End


Public Sub Button1_Click()

  With Printer1
    
    .Configure
    .Orientation = 0
    .Paper = 2
    .Resolution = Desktop.Resolution
    .GrayScale = False
' Creiamo e stampiamo su un file .pdf:
    .OutputFile = "/tmp/file.pdf"
    .Print
  End With

End


Public Sub Printer1_Draw()

  Dim n As Byte

  n = Val(InputBox("Quale DrawingArea vuoi stampare ?"))

' Richiamiamo ai fini della stampa le impostazioni presenti nella sub-procedura":
    Stampa(n)

End


Private Procedure Stampa(d As Byte)

  Dim mx, my, rY, dx, dy As Integer
  Dim dS As String

If d = 1 Then
   mx = 100
   my = 100
   rY = 100
   dX = 10
   dY = 10
   dS = "1"
Else
   mx = 200
   my = 200
   rY = 200
   dX = 200
   dY = 200
   dS = "2"
Endif

 With Paint
   .Begin(Printer1)
   .Brush = Paint.Color(Color.Red)
   .MoveTo(mx, my)
   .RelLineTo(0, rY)
   .Stroke
   .DrawText("DrawingArea" & dS, dX, dY, 20, 20)
   .End
 End With

End
Titolo: Re: [Risolto] Generare un file immagine da una DrawingArea
Inserito da: Top Fuel - 30 Marzo 2014, 17:39:28
Pensavo, non potrebbe essere sufficiente dare il Setfocus alla DrawingArea per poterla stampare su file?
Titolo: Re: [Risolto] Generare un file immagine da una DrawingArea
Inserito da: Gianluigi - 31 Marzo 2014, 16:42:29
Domanda: come faccio a collegare l'oggetto Printer ad una specifica DrawingArea? Ce ne potrebbero essere più di una, per esempio.

Io avrei scritto questo codice un po' rozzo... (ipotizziamo di avere due "DrawingArea"):
Codice: gambas [Seleziona]

Public Sub DrawingArea1_Draw()
...
...
...

End


Come ho avuto modo di dirti a mezzo messaggio privato ho provato il codice con gb.gui e funziona senza problemi, purtroppo invece con gb.qt4 no e mi restituisce l'errore NO CURRENT DEVICE con lo stack su Fmain.Stampa.

Tu mi hai risposto che a te il codice funziona benissimo e ti funziona benissimo anche la prova fatta da me e mi hai suggerito di chiedere alla comunità.

E allora ecco qua:

Per sgombrare il campo da domande già ricevute dico che il progetto grafico da me provato (e che a vuott funziona) prevede due DrawingArea (1 e 2) un pulsante Button1 una Printer1 e so che occorre andare a vedere nella cartella tmp il file PDF.  ;D

Preciso inoltre che aggiungendo all'inizio della procedura Stampa il codice Begin(Printer1) la routine funziona e ottengo il file pdf senza intoppi (ma quello sviluppato con gb.gui funziona senza aggiunte, e Ubuntu usa GTK+ che non sono quelle che con Gambas danno problemi? Mah!)

Qualcun'altro ha gli stessi miei risultati oppure qualcuno è in grado di spiegarmi cosa succede?   ???

Come già detto a vuott ho provato con gli stessi risultati su due differenti computer diversamente configurati sebbene entrambi con Ubuntu.

Attendo fiducioso  :(
Titolo: Re: [Risolto] Generare un file immagine da una DrawingArea
Inserito da: Gianluigi - 01 Aprile 2014, 16:01:23
Pensavo, non potrebbe essere sufficiente dare il Setfocus alla DrawingArea per poterla stampare su file?

Scusa il ritardo della risposta ma mi ero concentrato sul problema sopra esposto.  :)

Penso proprio di si e questo è un semplicissimo parto della mia mente:

Cambiando leggermente l'esempio di vuott

Codice: gambas [Seleziona]
' Gambas class file
Private byDove As Byte = 1 ' Default stampa draw 1

...

...

...


Public Sub DrawingArea1_GotFocus()
 
  byDove = 1
  DrawingArea1.Background = Color.Green  
End

Public Sub DrawingArea1_LostFocus()
  
  DrawingArea1.Background = Color.Default
  
End


Public Sub DrawingArea2_GotFocus()  
  
  byDove = 2
  DrawingArea2.Background = Color.Green
  
End

Public Sub DrawingArea2_LostFocus()

  DrawingArea2.Background = Color.Default
  
End

Public Sub Printer1_Draw()  
  
' Dim n As Byte  
  
' n = Val(InputBox("Quale DrawingArea vuoi stampare ?"))  
 
 ' Print n
  
' Richiamiamo ai fini della stampa le impostazioni presenti nella sub-procedura":  
   Stampa(byDove)  
 
End  


 :ciao:

ps. magari cambiando il green   ;D
ps2. devi portare a true il focus delle drawing
Titolo: Re: [Risolto] Generare un file immagine da una DrawingArea
Inserito da: vuott - 11 Dicembre 2014, 20:51:13
Segnalo questa pagina:

   https://www.gambas-it.org/wiki/index.php?title=Generare_un_file_immagine_da_una_DrawingArea