Visualizzazione dei risultati da 1 a 10 su 10
  1. #1

    [C++] Come salvare immagini create

    Ciao a tutti!

    Di recente mi sto dilettando a disegnare frattali con la libreria graphics.h
    Volevo chiedervi: dopo che ho disegnato un frattale come posso salvarlo in un file .bmp? (o comunque salvarlo in un file...)

    Il frattale il programma lo disegna nella finestra che ho chiamato con "initwindow", mi basterebbe un comando per salvare ciò che si vede a schermo, solo che nn ho ancora trovato come si fa...

    Non consigliatemi di fare uno screen, perchè vorrei fare un video, quindi quel metodo sarebbe infattibile...

    Grazie mille!
    Ciao!!
    Fai uno scherzo ai tuoi amici! Manda un'email anonima! Decidi tu il mittente delle tue email! Clicca qui!

  2. #2
    Ciao,
    Non ho capito dove programmi, ma se si tratta di Windows basta copiare il DC della finestra in un DC di una bitmap creata in memoria di uguale grandezza al Device Context e quindi salvarla in un file.
    Il blog sullo sviluppo software, lezioni online gratuite su VC/C++, VB.NET, C#, PHP, Windows e Linux.

  3. #3
    Utente di HTML.it L'avatar di linoma
    Registrato dal
    Mar 2010
    Messaggi
    1,346
    Puoi usare le gdi+ salvano anche pg,jpeg ed altri formati
    Per gli Spartani e Sparta usa spartan Il mio github

  4. #4
    Che roba è graphics.h? Ci puoi dare un link alla sua documentazione?
    Amaro C++, il gusto pieno dell'undefined behavior.

  5. #5
    come funzionano le gdi+? Dove posso trovare delle info?

    Ciao, Non ho capito dove programmi, ma se si tratta di Windows basta copiare il DC della finestra in un DC di una bitmap creata in memoria di uguale grandezza al Device Context e quindi salvarla in un file.
    Non ho capito nulla di quello che hai detto... Cos'è un DC? Come copio il DC?

    Comunque forse non avete capito bene quello che devo fare quindi vi posto il codice che ho scritto che disegna un frattale:

    codice:
    #include <cstdlib>
    #include <iostream>
    #include <graphics.h>
    #include <math.h>
    
    
    using namespace std;
    
    void quad(double v[])
    {
         double a,b;
         a=v[0]*v[0]-v[1]*v[1];
         b=2*v[0]*v[1];
         v[0]=a;
         v[1]=b;
         }
         
    double modulo(double v[])
    {
        return sqrt(v[0]*v[0]+v[1]*v[1]);
        
        }
    
    void colora(double v[], double zoom,int f[],double d[])  //f grandezza finestra, d centro del grafico
    {
         double c[]={v[0]/zoom,v[1]/zoom};   //rimane costante
         double b[]={v[0]/zoom,v[1]/zoom};   //verrà modificato
         int i=0;
         
         while (i<50 && b[0]<1e+70 && b[1]<1e+70) {
         quad(b);
            
               b[0]=b[0]+c[0];
               b[1]=b[1]+c[1];
         i++;      
         }
             
         if (b[0]<1e+40) {
                         if (b[0]<0.2 && b[0]>-0.2)
                            putpixel(int(-d[0])+f[0]/2+int(v[0]),int(-d[1])+f[1]/2+int(v[1]),COLOR(10,10,int(b[0]*1000)));
                         else
                             putpixel(int(-d[0])+f[0]/2+int(v[0]),int(-d[1])+f[1]/2+int(v[1]),COLOR(int(b[0]*100),int(b[1]*10),10));// putpixel(400+int(v[0]),300+int(v[1]),COLOR(int(b[0]*10),int(b[0]*10),int(b[1]*10)));
         }
         
         }
    
    int main(int argc, char *argv[])
    {
        int GRAY = COLOR(127,127,127);
        double zoom,c[]={0,0};
        int f[]={800,600};
        
       
        cout<<"Dammi lo zoom"<<endl;
        cin>>zoom;
        cout<<"Dammi il centro"<<endl;
        cin>>c[0];    //-1.787 il migliore x adesso
        cin>>c[1];
      
      c[0]=c[0]*zoom;
      c[1]=c[1]*zoom;
      
        initwindow(f[0],f[1]); //open a NxM graphics window. Its initial value is page 0
        setbkcolor(COLOR(0,0,0));//set the background color for page 0 (but does not draw it!)
        cleardevice();
      
        
        double s[]={2,3};
      
      int z=5000;
      int i=-f[0]/2+int(c[0]),j=-f[1]/2+int(c[1]);
    
    
        while (i<f[0]/2+c[0]) {
              j=-f[1]/2+c[1];
              while (j<f[1]/2+c[1]) {
                    s[0]=i;
                    s[1]=j;
                    colora(s,zoom,f,c);
                    j++;
                    }
        i++;
      }
      
        for (int k=0; k<f[0]; k++) 
              putpixel(k,f[1]/2-c[1],COLOR(255,255,255));
              
      for (int k=0; k<f[1]; k++)
               putpixel(f[0]/2-c[0],k,COLOR(255,255,255));
       
     
        
        system("PAUSE");
        return EXIT_SUCCESS;
    }
    Ecco, come posso salvare in una bitmap l'immagine che viene visualizzata?

    Grazie per le risposte!
    Fai uno scherzo ai tuoi amici! Manda un'email anonima! Decidi tu il mittente delle tue email! Clicca qui!

  6. #6
    Ma è un programma console senza l'sdk di windows. Non saprei.
    Il blog sullo sviluppo software, lezioni online gratuite su VC/C++, VB.NET, C#, PHP, Windows e Linux.

  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Cosa è putpixel ? Quale libreria e compilatore usi ?

    EDIT: probabilmente usi la vecchissima BGI per Borland ... non so se esistevano funzioni per il salvataggio della grafica generata (forse la writeimagefile). In ogni caso dovresti consultare la documentazione ...

    Ti consiglio comunque di abbandonare tale libreria e usare quello che ti è stato già proposto (ovviamente studiandone prima l'uso ...)
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  8. #8
    Utente di HTML.it L'avatar di linoma
    Registrato dal
    Mar 2010
    Messaggi
    1,346
    X le GDI+, di sicuro il tools che usi avra' qualcosa.
    Per gli Spartani e Sparta usa spartan Il mio github

  9. #9
    Originariamente inviato da oregon
    Cosa è putpixel ? Quale libreria e compilatore usi ?

    EDIT: probabilmente usi la vecchissima BGI per Borland ... non so se esistevano funzioni per il salvataggio della grafica generata (forse la writeimagefile). In ogni caso dovresti consultare la documentazione ...

    Ti consiglio comunque di abbandonare tale libreria e usare quello che ti è stato già proposto (ovviamente studiandone prima l'uso ...)
    sisi vecchissima BGI, e la funzione che dici è proprio quella giusta! Peccato però che la qualità dell'immagine sia abbastanza bassina...

    Cosa posso quindi utilizzare di più aggiornato? Le GDI+ dici? io per programmare utilizzo dev-C++
    Fai uno scherzo ai tuoi amici! Manda un'email anonima! Decidi tu il mittente delle tue email! Clicca qui!

  10. #10
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Puoi utilizzare Visual C++ con le GDI+ ... oppure C# con .NET
    No MP tecnici (non rispondo nemmeno!), usa il forum.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.