Principale utente con più risposte
Rileggere un file .png

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 ??
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
-
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
-
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
-
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
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
-
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 .
-
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
-
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 .
-
-
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
-
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
-
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 .
-
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 .
-
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;
-
-