Autore Topic: [Risolto] Generare un file immagine da una DrawingArea  (Letto 1093 volte)

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.716
  • Ne mors quidem nos iunget
    • Mostra profilo
[Risolto] Generare un file immagine da una DrawingArea
« il: 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.
« Ultima modifica: 11 Marzo 2012, 21:40:08 da vuott »
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.482
    • Mostra profilo
Re: Generare un file immagine da una DrawingArea
« Risposta #1 il: 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

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.716
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: Generare un file immagine da una DrawingArea
« Risposta #2 il: 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:
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.716
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: [Risolto] Generare un file immagine da una DrawingArea
« Risposta #3 il: 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 mediante la proprietà .OutputFile della Classe Printer;
* utilizzando il file PDF, converto la pagina PDF in una Image (è necessario attivare il componente gb.pdf);
* quindi salvo detta Image con il suo metodo .Save in un file immagine.  :)
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline Top Fuel

  • Gran Maestro dei Gamberi
  • *****
  • Post: 959
    • Mostra profilo
Re: [Risolto] Generare un file immagine da una DrawingArea
« Risposta #4 il: 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.
Dear youtube administrators, your search bar is broken. When I type the letter "J" it appears justin bieber when it should appear Jimi Hendrix. Fix this, please.

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.716
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: [Risolto] Generare un file immagine da una DrawingArea
« Risposta #5 il: 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
« Ultima modifica: 17 Luglio 2015, 18:15:40 da vuott »
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline Top Fuel

  • Gran Maestro dei Gamberi
  • *****
  • Post: 959
    • Mostra profilo
Re: [Risolto] Generare un file immagine da una DrawingArea
« Risposta #6 il: 30 Marzo 2014, 17:39:28 »
Pensavo, non potrebbe essere sufficiente dare il Setfocus alla DrawingArea per poterla stampare su file?
Dear youtube administrators, your search bar is broken. When I type the letter "J" it appears justin bieber when it should appear Jimi Hendrix. Fix this, please.

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.244
  • Tonno verde
    • Mostra profilo
Re: [Risolto] Generare un file immagine da una DrawingArea
« Risposta #7 il: 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  :(
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.244
  • Tonno verde
    • Mostra profilo
Re: [Risolto] Generare un file immagine da una DrawingArea
« Risposta #8 il: 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
« Ultima modifica: 01 Aprile 2014, 16:06:06 da Gianluigi »
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.716
  • Ne mors quidem nos iunget
    • Mostra profilo
« Ultima modifica: 27 Agosto 2020, 20:40:36 da vuott »
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »