none
Rileggere un file .png RRS feed

  • Domanda

  • Ciao a tutti ,

    premesso  che :

    • ho  creato  un  grafico   :    FA4 = new Bitmap(wA4, hA4);             g = Graphics.FromImage(FA4); 
    • l' ho salvato su disco     :    FA4.Save(saveDlg.FileName, System.Drawing.Imaging.ImageFormat.Png);

    vorrei  riprenderlo  dentro  l' applicazione :  ricaricarlo  su  una  nuova  bitmap  ( credo )  per  poterlo  rileggere .

    E'  possibile  ??

    martedì 20 settembre 2022 11:49

Risposte

  • Ciao Vittorio,

    certo che é possibile, basta ricaricarlo con Bitmap.FromFile("nomefile.png").

    Ora siccome mi sembra fin troppo banale, presumo che se lo stia chiedendo abbia riscontrato qualche problema... la prima cosa che mi viene in mente é che devi accertarti che la risorsa sia stata rilasciata prima di ricaricarla, diversamente potresti avere dei problemi (tipo che il file é in uso) quindi ricorda di fare il "Dispose" delle immagini prima di tentare di ricaricarle (nel tuo caso sarebbe FA4.Dispose()). Ma se hai problemi dovresti indicare i problemi che riscontri.


    • Modificato U 235 martedì 20 settembre 2022 12:43
    • Contrassegnato come risposta vittorio 50 martedì 20 settembre 2022 16:05
    martedì 20 settembre 2022 12:43
  • Quindi vuoi scrivere l'immagine dentro un immagine? Se é così allora devi usare DrawImage sul graphics dell'immagine in cui vuoi scrivere l'immagine caricata. Però non capisco cosa intendi quando dici : "non conosco le dimensioni wA4 hA4", io di sicuro non le conosco ;)

    In ogni caso da FA4 recuperi il graphics (nel tuo post sarebbe g), poi carichi in una nuova bitmap il file dal disco che vuoi scrivere nella prima immagine ed usi g.DrawImage (su g appunto):

                var hA4 = 600;
                var wA4 = 600;
                using (var FA4 = new Bitmap(wA4, hA4))
                {
                    using (Graphics g = Graphics.FromImage(FA4))
                    {
                        using (var bitmapDaDisco = Bitmap.FromFile("bitmapDaDisco.png"))//immagine 300x300
                        {
                            //posizionato al centro
                            g.DrawImage(bitmapDaDisco, new Point(wA4 / 4, hA4 / 4));
                        }
                    }
                    FA4.Save("test123.png", ImageFormat.Png);
                }


    Ricorda sempre di usare il costrutto "using" per fare in modo che vengano rilasciate le risorse, in modo che le puoi poi riutilizzare senza ricevere errori. 

    Riguardo il fatto che ti mancano i presupposti: Io non sono un insegnante, e nemmeno il forum é scuola, ma se posso do una mano cercando di spiegare le cose, poi sta a te... se sei un buon autodidatta allora troverai la tua strada, ovviamente dovrai studiare, mentre se non sei un buon autodidatta o non hai voglia di studiare, quando non ci sarà nessuno ad aiutarti sari costretto o ad abbandonare oppure ad imparare da te per forza. La selezione naturale non perdona. Non sei certo un bimbo, quindi non c'é bisogno di stare li a darti addosso e magari "trattarti male" (come fanno alcuni) per spronarti a studiare, sai da solo quello che devi fare se vuoi imparare e renderti indipendente. Quando e se non ho voglia di aiutarti nessuno mi obbliga a rispondere, piuttosto che farti la paternale preferirei astenermi dal risponderti.


    • Modificato U 235 martedì 20 settembre 2022 18:08
    • Contrassegnato come risposta vittorio 50 mercoledì 21 settembre 2022 08:01
    martedì 20 settembre 2022 17:53
  • Vittorio perdonami, ma non si capisce bene cosa vuoi... prima chiedi se si può rileggere un immagine, dopo dici che la vuoi "importare" in un grafico, dopo introduci il problema che non conosci le dimensioni....

    Cosa ti serve? ti serve conoscere le dimensioni dell'immagine? se è così bastava chiedere direttamente: "come faccio a sapere che dimensioni ha un immagine?" senza mettere in gioco che vuoi importarlo e showdialog e tutto il resto. 

    Oppure se il fine è importare l'immagine come da risposta (che hai segnato tu), ma per farlo ti serve sapere le dimensioni, allora il "come conoscere le dimensioni dell'immagine" si tratta di un altra discussione.

    questo:

    if (openDlg.ShowDialog() != DialogResult.OK) return;

    Non significa nulla di per se... è solo una condizione che ti permette di uscire da un eventuale metodo (void) in cui è scritto questo codice nel caso i cui l'utente non clicca sul bottone OK, ma non fa nulla che abbia a che vedere con le dimensioni dell'immagine, ne con la scrittura di grafici (poi per grafico si possono intendere tante cose, se è la traduzione da graphics allora non usarla, usa il termine in inglese diversamente in italiano si confonde) o di immagini dentro grafici.

    Ripeto se vuoi sapere le dimensioni dell'immagine chiedi quello, ma vorrei essere certo che ti serve quello prima di risponderti, se no rischiamo di fare un mischione come gli altri thread.

    • Contrassegnato come risposta vittorio 50 venerdì 23 settembre 2022 08:28
    mercoledì 21 settembre 2022 13:57
  • Ciao Vittorio,

    per mostrare a video un qualsiasi file grafico, puoi fare così:

    OpenFileDialog openDlg = new OpenFileDialog();
    if (openDlg.ShowDialog() != DialogResult.OK) return;                
                                        
    Bitmap FA4 = new Bitmap(openDlg.FileName);            
    PictureBox myPictureBox = new PictureBox();
    myPictureBox.Image = FA4;
    myPictureBox.Size = new Size(FA4.Width, FA4.Height);                                 
    Controls.Add(myPictureBox);
    Size = myPictureBox.Size;       
    

    • Contrassegnato come risposta vittorio 50 venerdì 23 settembre 2022 08:28
    mercoledì 21 settembre 2022 14:52

Tutte le risposte

  • Ciao Vittorio,

    certo che é possibile, basta ricaricarlo con Bitmap.FromFile("nomefile.png").

    Ora siccome mi sembra fin troppo banale, presumo che se lo stia chiedendo abbia riscontrato qualche problema... la prima cosa che mi viene in mente é che devi accertarti che la risorsa sia stata rilasciata prima di ricaricarla, diversamente potresti avere dei problemi (tipo che il file é in uso) quindi ricorda di fare il "Dispose" delle immagini prima di tentare di ricaricarle (nel tuo caso sarebbe FA4.Dispose()). Ma se hai problemi dovresti indicare i problemi che riscontri.


    • Modificato U 235 martedì 20 settembre 2022 12:43
    • Contrassegnato come risposta vittorio 50 martedì 20 settembre 2022 16:05
    martedì 20 settembre 2022 12:43
  • Grazie  U 235  per l'interessamento costante .

    Cerco  il  file  .png  con  :   if (openDlg.ShowDialog() != DialogResult.OK) return;

    poi  dovrei  importarlo  in  un  grafico  e  qui  mi  fermo :  non  conosco  le  dimensioni  wA4  hA4

    FA4 = new Bitmap(wA4, hA4);             g = Graphics.FromImage(FA4); 

    ovviamente  non  funziona  neanche   :   FA4 = new Bitmap.FromFile(openDlg.FileName);

    Sempre  della  serie  che  mi  mancano  i  presupposti .

    martedì 20 settembre 2022 16:21
  • Quindi vuoi scrivere l'immagine dentro un immagine? Se é così allora devi usare DrawImage sul graphics dell'immagine in cui vuoi scrivere l'immagine caricata. Però non capisco cosa intendi quando dici : "non conosco le dimensioni wA4 hA4", io di sicuro non le conosco ;)

    In ogni caso da FA4 recuperi il graphics (nel tuo post sarebbe g), poi carichi in una nuova bitmap il file dal disco che vuoi scrivere nella prima immagine ed usi g.DrawImage (su g appunto):

                var hA4 = 600;
                var wA4 = 600;
                using (var FA4 = new Bitmap(wA4, hA4))
                {
                    using (Graphics g = Graphics.FromImage(FA4))
                    {
                        using (var bitmapDaDisco = Bitmap.FromFile("bitmapDaDisco.png"))//immagine 300x300
                        {
                            //posizionato al centro
                            g.DrawImage(bitmapDaDisco, new Point(wA4 / 4, hA4 / 4));
                        }
                    }
                    FA4.Save("test123.png", ImageFormat.Png);
                }


    Ricorda sempre di usare il costrutto "using" per fare in modo che vengano rilasciate le risorse, in modo che le puoi poi riutilizzare senza ricevere errori. 

    Riguardo il fatto che ti mancano i presupposti: Io non sono un insegnante, e nemmeno il forum é scuola, ma se posso do una mano cercando di spiegare le cose, poi sta a te... se sei un buon autodidatta allora troverai la tua strada, ovviamente dovrai studiare, mentre se non sei un buon autodidatta o non hai voglia di studiare, quando non ci sarà nessuno ad aiutarti sari costretto o ad abbandonare oppure ad imparare da te per forza. La selezione naturale non perdona. Non sei certo un bimbo, quindi non c'é bisogno di stare li a darti addosso e magari "trattarti male" (come fanno alcuni) per spronarti a studiare, sai da solo quello che devi fare se vuoi imparare e renderti indipendente. Quando e se non ho voglia di aiutarti nessuno mi obbliga a rispondere, piuttosto che farti la paternale preferirei astenermi dal risponderti.


    • Modificato U 235 martedì 20 settembre 2022 18:08
    • Contrassegnato come risposta vittorio 50 mercoledì 21 settembre 2022 08:01
    martedì 20 settembre 2022 17:53
  • Ciao  U235 ,  ovvio  che  mi  sto  impegnando  come  autodidatta ( nei limiti delle mie capacità )

    Grazie  comunque  sempre  a  te  ed  a  tutti  per  la  generosa  attenzione . Spero  di  non  eccedere  in  alcun  modo .

    Tornando a  bomba :  quando  salvo  il  grafico  conosco  ovviamente  le  sue  dimensioni : l' ho  appena  creato .

    Quello  che  vorrei  fare  è ,  a  distanza  di tempo ,  riprendere  un  grafico  salvato  su  disco  in  formato  .png  e  poterlo  rivedere  su  video .

    A  questo  punto  lo  cerco  con  :   if (openDlg.ShowDialog() != DialogResult.OK) return;

    ma  non  conosco  le  sue  dimensioni   :  wA4  hA4

    Non  so  se  questo  significa  scrivere  un'immagine  dentro  un' immagine .

    mercoledì 21 settembre 2022 08:14
  • P. S.

    ho  cercato  con  

    Image.PropertyItems

    ma  non  credo  di  aver  trovato

    mercoledì 21 settembre 2022 08:20
  • Vittorio perdonami, ma non si capisce bene cosa vuoi... prima chiedi se si può rileggere un immagine, dopo dici che la vuoi "importare" in un grafico, dopo introduci il problema che non conosci le dimensioni....

    Cosa ti serve? ti serve conoscere le dimensioni dell'immagine? se è così bastava chiedere direttamente: "come faccio a sapere che dimensioni ha un immagine?" senza mettere in gioco che vuoi importarlo e showdialog e tutto il resto. 

    Oppure se il fine è importare l'immagine come da risposta (che hai segnato tu), ma per farlo ti serve sapere le dimensioni, allora il "come conoscere le dimensioni dell'immagine" si tratta di un altra discussione.

    questo:

    if (openDlg.ShowDialog() != DialogResult.OK) return;

    Non significa nulla di per se... è solo una condizione che ti permette di uscire da un eventuale metodo (void) in cui è scritto questo codice nel caso i cui l'utente non clicca sul bottone OK, ma non fa nulla che abbia a che vedere con le dimensioni dell'immagine, ne con la scrittura di grafici (poi per grafico si possono intendere tante cose, se è la traduzione da graphics allora non usarla, usa il termine in inglese diversamente in italiano si confonde) o di immagini dentro grafici.

    Ripeto se vuoi sapere le dimensioni dell'immagine chiedi quello, ma vorrei essere certo che ti serve quello prima di risponderti, se no rischiamo di fare un mischione come gli altri thread.

    • Contrassegnato come risposta vittorio 50 venerdì 23 settembre 2022 08:28
    mercoledì 21 settembre 2022 13:57
  • Ciao Vittorio,

    per mostrare a video un qualsiasi file grafico, puoi fare così:

    OpenFileDialog openDlg = new OpenFileDialog();
    if (openDlg.ShowDialog() != DialogResult.OK) return;                
                                        
    Bitmap FA4 = new Bitmap(openDlg.FileName);            
    PictureBox myPictureBox = new PictureBox();
    myPictureBox.Image = FA4;
    myPictureBox.Size = new Size(FA4.Width, FA4.Height);                                 
    Controls.Add(myPictureBox);
    Size = myPictureBox.Size;       
    

    • Contrassegnato come risposta vittorio 50 venerdì 23 settembre 2022 08:28
    mercoledì 21 settembre 2022 14:52
  • Ciao  U235 , sei  decisamente  tu  che  devi  perdonarmi  per  la  mia  ignoranza  dei  termini  e  dei  presupposti .

    Io  sono   capace  solo  di  esporre  il  problema  usando  termini  generici  che  spero  possano  chiarire  il  mio  pensiero .

    Nel  caso  specifico  ho  costruito  ( quello  che  chiamerei  grafico , non  so  però  se  il  termine  è  appropriato )   utilizzando  le  istruzioni  :

    FA4 = new Bitmap(wA4, hA4);             g = Graphics.FromImage(FA4); 

    L' ho  salvato  su  disco  in  un  file   .png

    Ora  vorrei  riprenderlo  da  disco  e  rivederlo  su  video . La ricerca  su  disco  la  faccio  con  :

    if (openDlg.ShowDialog() != DialogResult.OK) return;

    poi  non  so  qual'è  la  procedura  appropriata . Sarei  portato  a  ritenere  di  dover  in  qualche  modo  riutilizzare :

    FA4 = new Bitmap(wA4, hA4);             g = Graphics.FromImage(FA4); 

    però  al  momento  non  conosco  le  dimensioni   wA4  e  hA4

    Può  essere  che  l'istruzione  che  effettivamente  importerà  il  file  .png  sarà  in  grado  di  leggere  autonomamente  questi dati.

    E'  tutto . La  domanda  in  effetti  è  articolata  e  può  essere  scomposta  in   sotto-domande  più  semplici .

    venerdì 23 settembre 2022 08:45
  • Ciao  Fabio , 

    hai  una  notevole  capacità  di  capire  il  mio  pensiero  che , penso , sia  molto  poco  ortodosso  per  chi  è  abituato  a  programmare  utilizzando  l' IDE  VisualStudio .

    Ne  sospettavo  l' esistenza ; l' istruzione :   Bitmap = new Bitmap(openDlg.FileName);

    risolve  il  problema  delle  dimensioni .

    Effettivamente  le  tue  istruzioni  portano  a  video  il  file  .png  importato  da  disco .

    Si  tratta  ora  di  rifinire  il  tutto   aggiungendo  gli  scrolling  verticale  ed  orizzontale  che , al  momento , non  ci  sono . 

    venerdì 23 settembre 2022 09:00
  • Allora, sostituisci l'ultima riga con l'istruzione  AutoScroll = true;

    OpenFileDialog openDlg = new OpenFileDialog();
    if (openDlg.ShowDialog() != DialogResult.OK) return;                
                                        
    Bitmap FA4 = new Bitmap(openDlg.FileName);                                                
    PictureBox myPictureBox = new PictureBox();
    myPictureBox.Image = FA4;
    myPictureBox.Size = new Size(FA4.Width, FA4.Height);                                          
    
    Controls.Add(myPictureBox);            
    AutoScroll = true;
    
    

    venerdì 23 settembre 2022 14:31
  • GRANDE  Fabio ,

    funziona  !!

    o  meglio : l' unica  cosa  che  non  funziona  è  che  manca  lo  scrolling  orizzontale  ( quello  verticale  è  OK )

    venerdì 23 settembre 2022 14:58
  • MI  CORREGGO  FABIO

    FUNZIONA  TUTTO 

    TANTISSIME  GRAZIE

    venerdì 23 settembre 2022 15:01