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

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.248
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:Generare un file immagine da una DrawingArea
« Risposta #15 il: 16 Ottobre 2017, 16:08:55 »
Ma il motivo per cui l'altezza del MainForm è settata a 550 e per problemi di risoluzione del laptop

In buon sostanza devi avere cura che la dimensione del Form sia sufficientemente più grande della dimensione della DrawingArea.   
« 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.248
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:Generare un file immagine da una DrawingArea
« Risposta #16 il: 16 Ottobre 2017, 16:10:15 »
perché se è cosi mi da ancora errore ....

...pur modificando la dimensione del Form ?
« 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.248
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:Generare un file immagine da una DrawingArea
« Risposta #17 il: 16 Ottobre 2017, 16:17:29 »
A me il tuo codice funziona con la modifica apportata a Me.Height .

Allego il file immagine generato.
« 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 Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.136
  • Tonno verde
    • Mostra profilo
Re:Generare un file immagine da una DrawingArea
« Risposta #18 il: 16 Ottobre 2017, 17:56:39 »
Citazione
Menu Progetto > Crea > Pacchetto sorgenti...(Ctrl+Alt+A) e poi alleghi il progetto Gambas compresso.

Non sapevo che si potesse compattare il codice  :-[ :-[
e nella confusione ho aperto un nuovo post. Scusate.
Ma il motivo per cui l'altezza del MainForm è settata a 550 e per problemi di risoluzione del laptop

Così alleghi tutto il progetto ed eviti agli altri di dover ricostruire il progetto.
È una gentilezza che facciamo agli altri per farli lavorare meno.
Aspetto pertanto di vedere il tuo progetto allegato  :D
Oggi mi sento tanto sniper  ;D

 :ciao: :ciao:
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline vigiot

  • Gambero
  • **
  • Post: 75
    • Mostra profilo
Re:Generare un file immagine da una DrawingArea
« Risposta #19 il: 16 Ottobre 2017, 21:25:25 »
Quasi risolto ...
per generare l'immagine ho provato ...
Codice: [Seleziona]
Private Sub Crea_Immagine()
Dim im As Image
 
' Crea un'immagine delle medesime dimensioni della "DrawingArea"
'  le disegna usando le stesse routine per la drawing ...
  im = New Image(DwgArea1.Width, DwgArea1.Height, Color.White)
  Modulo_Base(im)
  Scrivi_Data(im)
  Scrivi_Mese(im)
  im.Save("/home/franco/Scrivania/test.png", 100)
 
End

Per farne un pdf ..
Citazione
Private Sub Crea_Pdf()
  Dim im As Image
  pdf = New CairoPdfSurface("/home/franco/Scrivania/test.pdf", 210.0, 297.0, "1.5")
 
  Cairo.Begin(pdf)
  im = Image.Load("/home/franco/Scrivania/test.png")
  Cairo.Scale(1, 1)
  Cairo.Source = Cairo.ImagePattern(im, 10, 10)
  Cairo.PaintPrivate Sub Crea_Immagine()
  Cairo.ShowPage
  Cairo.End
End

Ovviamente ho dovuto modificare le sub in modo che Paint.Begin() accettasse un diverso Object a seconda dei casi.
In effetti il pdf lo crea ma..... risulta corrotto quando tenti di visualizzarlo
Santa Polenta ! :'( :'(
.... ritentiamo ...
Siamo tutti ignoranti, ma fortunatamente non della stessa cosa. Albert Einstein

Offline vigiot

  • Gambero
  • **
  • Post: 75
    • Mostra profilo
Re:[Risolto o Quasi]Generare un file immagine da una DrawingArea
« Risposta #20 il: 16 Ottobre 2017, 23:37:25 »
Comincio a pensare che sia il mio Debian abbia qualcosa che non va. :mad:
Non è possibile che il codice su una distro funzioni e nell'altra no!  >:(
Domani installo Ubuntu, poi vediamo. :o
Siamo tutti ignoranti, ma fortunatamente non della stessa cosa. Albert Einstein

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.248
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:[Risolto o Quasi]Generare un file immagine da una DrawingArea
« Risposta #21 il: 16 Ottobre 2017, 23:38:54 »
...ma il problema da te sollevato del puntatore nullo, lo hai risolto con la mia indicazione ?
« 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 vigiot

  • Gambero
  • **
  • Post: 75
    • Mostra profilo
Re:[Risolto o Quasi]Generare un file immagine da una DrawingArea
« Risposta #22 il: 17 Ottobre 2017, 14:05:08 »
No !  :hatecomputer:
ed inoltre non sono riuscito nemmeno a visualizzare l'immagine che hai allegato !! >:(
mi dice che l'estensione image/pdf non è supportata.
Mi sta facendo salire il nervoso, sembra quasi di dover inserire dei controlli in una finestra in GTK+ (verticalbox, orizzontal box ecc.)
Questo "programmino" lo ho già scritto in c per GTK3+, ma come saprai il c e la manipolazione delle stringhe non sono proprio amici :hard:
In compenso non avevo "tribolato" così per creare un pdf ...
Tutto questo per la serie "Se non ti complichi la vita non riesci a star bene"
 Mah...  :'(
Grazie per l'interessamento vuott :)
ed a Gianluigi non temere quando riuscirò a far funzionare come voglio questa "ciofeca" posto il codice
 :ciao: :ciao: :ciao:
Siamo tutti ignoranti, ma fortunatamente non della stessa cosa. Albert Einstein

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.136
  • Tonno verde
    • Mostra profilo
Re:[Risolto o Quasi]Generare un file immagine da una DrawingArea
« Risposta #23 il: 17 Ottobre 2017, 14:51:26 »
...Gianluigi non temere quando riuscirò a far funzionare come voglio questa "ciofeca" posto il codice

Figurati, era che se invece di postare il solo codice (.pdf) avessi postato il programma, anche se non funzionante, avrei potuto darci un occhio e magari darti un parere.

Parere che comunque ti do lo stesso  ;D
Ti sconsiglierei di "tradurre pedissequamente" in Gambas3 un programma fatto per/con altri codici, ad esempio Gambas ha un componente gb.report2 che serve per fare quanto tu cerchi di fare in modo non gambas like, per non parlare del "nostro" PdfWriter.
Ogni linguaggio di programmazione ha il proprio modo di affrontare i problemi, ti suggerirei di tenerne conto, salvo restando il tuo diritto/piacere a tentare qualunque traduzione passo passo.

 :ciao: :ciao:
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline vigiot

  • Gambero
  • **
  • Post: 75
    • Mostra profilo
Re:[Risolto o Quasi]Generare un file immagine da una DrawingArea
« Risposta #24 il: 17 Ottobre 2017, 16:25:18 »
Per me la considero una fortuna che qualcun'altro possa esaminare il codice.
Serve a migliorarsi. :D
per quanto riguarda la "trasformazione" sono partito da qui:
Codice: [Seleziona]
        const char *filename = g_strconcat(archivio_pdf_anno_corrente, "/fattura_", numero_fattura_text, NULL);
        print_pdf = true;
        GdkPixbuf *image_2;
        GdkPixbuf *image_2_gs;
        cairo_surface_t *surface;
        cairo_t *cr1;
        cairo_t *cr2;
        int widht = 596 , height = 843;
        surface = cairo_pdf_surface_create(filename, widht, height);
        cairo_pdf_surface_restrict_to_version(surface, CAIRO_PDF_VERSION_1_5);
        //cout<<"Surface..."<<cairo_status_to_string(cairo_surface_status(surface))<<endl;
        cr1 = cairo_create(surface);
        cr2 = cairo_create(surface);
        //cout<<"Prima pagina "<<cairo_status_to_string(cairo_status(cr1))<<endl;
        //cout<<"Seconda pagina "<<cairo_status_to_string(cairo_status(cr2))<<endl;
        drawing_model_part_zero(cr1);
        if (abbiamo_bollo) {
            // l'immagine del bollo
            image_2 = gdk_pixbuf_new_from_xpm_data((const char **)bollo_xpm);
            gdk_cairo_set_source_pixbuf(cr1, image_2, 430, 8);
            cairo_rectangle(cr1,430, 8, 134, 89);
            cairo_fill(cr1);
            g_object_unref(image_2);
        };
        drawing_model_part_one(cr1);
        if (abbiamo_cliente) {
            drawing_model_part_two(cr1);
        };
        cairo_show_page(cr1);
        // seconda pagina
        if (abbiamo_bollo) {
            // l'immagine del bollo
            image_2_gs = gdk_pixbuf_new_from_xpm_data((const char **)bollo_gs_xpm);
            gdk_cairo_set_source_pixbuf(cr2, image_2_gs, 415, 8);
            cairo_rectangle(cr2,415, 8, 171, 114);
            cairo_fill(cr2);
            g_object_unref(image_2_gs);
        };
        seconda_pagina = true;
        drawing_model_part_zero(cr2);
        drawing_model_part_one(cr2);
        drawing_model_part_two(cr2);
        cairo_show_page(cr2);
        cairo_surface_destroy(surface);
        cairo_destroy(cr1);
        cairo_destroy(cr2);
        seconda_pagina = false;
        cout<<"Il file \""<<filename<<"\" è stato scritto correttamente"<<endl;
        print_pdf = false;

C'è da dire che per le operazioni di disegno viene usato cairo e non paint.
un istruzione in cairo per dare un riferimento es.: cairo_move_to (cr,10,10)
qui verrebbe tradotta in : Paint.MoveTo(10,10)
perché l'oggetto in cui vai ad agire lo hai già impostato con Paint.Begin(oggetto_su_cui_disegnare)
Quindi anche modificando sub Es.: Disegna() con Disegna(obj AS Object)
e di conseguenza   la chiamata diveniva Disegna(DrawingArea1) per la DwgArea
o Disegna(pdf) per il pdf appunto (Dim pdf As CairoPdfSurface)
Purtroppo non funzionano allo stesso modo! :hatecomputer:
ciao  :ciao:
Siamo tutti ignoranti, ma fortunatamente non della stessa cosa. Albert Einstein

Offline vigiot

  • Gambero
  • **
  • Post: 75
    • Mostra profilo
Re:[Risolto o Quasi]Generare un file immagine da una DrawingArea
« Risposta #25 il: 17 Ottobre 2017, 17:42:19 »
Cari Gianluigi e vuott

Ad ogni buon conto posto il codice "corretto" (Prova1_...)
Il risultato come immagine (Test_Dwg3)
il codice in c per fare il mio "Dialogo" (My_Dialog.c)
e l'immagine catturata del mio dialogo in azione(Schermata ....)

 :ciao: :ciao:
« Ultima modifica: 17 Ottobre 2017, 17:45:18 da vigiot »
Siamo tutti ignoranti, ma fortunatamente non della stessa cosa. Albert Einstein

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.136
  • Tonno verde
    • Mostra profilo
Re:[Risolto o Quasi]Generare un file immagine da una DrawingArea
« Risposta #26 il: 17 Ottobre 2017, 19:08:52 »
Ho provato a decomprimere i tuoi file compressi ma ottengo errore  :-\

 :ciao:
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline vigiot

  • Gambero
  • **
  • Post: 75
    • Mostra profilo
Re:[Risolto o Quasi]Generare un file immagine da una DrawingArea
« Risposta #27 il: 17 Ottobre 2017, 20:51:12 »
Su Quale ? ???
 :ciao:
Siamo tutti ignoranti, ma fortunatamente non della stessa cosa. Albert Einstein

Offline vigiot

  • Gambero
  • **
  • Post: 75
    • Mostra profilo
Re:[Risolto o Quasi]Generare un file immagine da una DrawingArea
« Risposta #28 il: 17 Ottobre 2017, 20:56:32 »
Su tutti suppongo, ho provato, anche a me dà errore !!!!!  :hatecomputer: Pazzesco !
Compresso con questo sistema e lo stesso sistema non riesce a decompattarlo !!
Inizio ad avere seri dubbi sull'integrità del mio Debian.  :evil:
Siamo tutti ignoranti, ma fortunatamente non della stessa cosa. Albert Einstein

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.248
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:[Risolto o Quasi]Generare un file immagine da una DrawingArea
« Risposta #29 il: 17 Ottobre 2017, 21:20:44 »
Inizio ad avere seri dubbi sull'integrità del mio Debian. 

......
« 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. »