Picture box

sabato 27 settembre 2008 - 21.21

DomA Profilo | Expert

Vorrei chiedervi due cose che, amolti di voi sono certo, sembreranno delle banalità.

Per caricare una img in una picturebox uso la seguente istruzione:
Me.PictureBox1.Load("D:\Ninfee.jpg")
e fin qui nessun problema.

Adesso le due domande sono:
i) come si fa ad adattare l'img alle dimensioni della picturebox?
ìì) come si fa a salavare la picture in una determinata cartella?

per quanto riguarda il 2° quesito io ho provato così:
Me.PictureBox1.Image.Save("D:\Catalogo\Ninfee.jpg")
tuttavia mi da un errore: Errore generico in GDI+.
Potrestre aiutarmi? Vi sembrerà strano ma fin'ora non ho mai utilizzato le picture box.
Grazie a tutti

Domenico

aiedail92 Profilo | Expert

Ciao

Per il primo punto, basta impostare la proprietà SizeMode della PictureBox a Stretch (l'immagine assume le stesse dimensioni della PictureBox) oppure a Zoom (l'immagine viene ridimensionata per essere interamente contenuta nel controllo, ma mantiene le proporzioni)

Per quanto riguarda il secondo problema invece, forse dipende dal fatto che la cartella di destinazione non esiste. Se è così, prova a crearla prima, o a mano, o, meglio, dal programma, usando questo codice:

'verifica l'esistenza della cartella If Not Directory.Exists("D:\Catalogo") Then 'Se non esiste la crea Directory.CreateDirectory("D:\Catalogo") End If

Luca

DomA Profilo | Expert

Ti ringrazio per la risposta. Per il primo quesito ci provo subito.
Per quanto concerne il secondo il problema è che la Directory "D:\Catalogo" esiste e quando vado ad aprirla ci trovo anche l'img nel formato jpg solo che è 0 byte.

Domenico

aiedail92 Profilo | Expert

Un errore generico in GDI+ può essere praticamente tutto... Man mano che mi verranno in mente le cause ti scriverò per vedere se si risolve il problema. Per adesso ad esempio prova a vedere se il file che hai già (quello di 0 kb) non è in qualche modo protetto (ad esempio in sola lettura)

Luca

jtpsala Profilo | Senior Member

Ciao!
i) come si fa ad adattare l'img alle dimensioni della picturebox?

imposta la proprietà SizeMode della PitureBox, in fase di progettazione....



ìì) come si fa a salavare la picture in una determinata cartella

Per salvare l'immagine usa:

Private Const OFFSET As Integer = 78


PictureBox1.Image.Save("C:\MiaCartella\" & NomeImmagine.png", Imaging.ImageFormat.Png)

Ciao

DomA Profilo | Expert

Sfortunatamente non funziona neanchè il "metodo" suggerito da Giuseppe.

Private Const OFFSET As Integer = 78 PictureBox1.Image.Save("C:\MiaCartella\" & NomeImmagine.png", Imaging.ImageFormat.Png)

Nella cartella adesso c'è un file.png di 0 byte e mi da lo stesso errore.

Ho annche controllato nelle proprietà del file e non è in sola lettura.




Domenico

aiedail92 Profilo | Expert

Forse allora il problema è dovuto al formato dell'immagine... Prova a creare un'immagine dall'originale e salvare quella, fammi sapere:

Dim copy As New Bitmap(tuaPictureBox.Image) copy.Save("D:\Catalogo\Ninfee.jpg")

Luca

DomA Profilo | Expert

Ringrazio Luca e Giuseppe per la disponibiltà e l'aiuto.
Documentandomi ho scoperto che non basta caricare l'img nella picturebox per salvarla (perchè non è stata impostata graficamente quindi è vuota --> problema file 0 byte).
Quindi vi posto la soluzione (che ho trovato sun un altro forum):

Dim sfondoImg As Image = Image.FromFile("D:\Ninfee.jpg") Dim G As Graphics = Graphics.FromImage(sfondoImg) 'Disegno qualcosa sullo sfondo : Dim penna As New System.Drawing.Pen(System.Drawing.Color.Transparent) penna.Width = 0 Dim i As Integer = 0 For i = 1 To 10 G.DrawLine(penna, 0, i * 50, 500, i * 50) Next 'Sincronizzo l'immagine con quella visualizzata nella PictureBox : PictureBox1.Image = sfondoImg 'Salvo l'immagine : sfondoImg.Save("D:\MASTEREASY\Catalogo\Ninfee.jpg", Imaging.ImageFormat.Jpeg)

Ciao

P.S. ho provato anche l'ultimo suggerimento di Luca ma da sempre lo stesso errore.
Grazie ancora ed a presto.

aiedail92 Profilo | Expert

Ok, in realtà non c'è bisogno di disegnare sull'immagine, il problema risiedeva nel metodo che usavi per caricarla (me ne sono accorto troppo tardi ). Con PictureBox.Load non carichi "fisicamente" l'immagine, ma visualizzi semplicemente l'immagine al percorso indicato. Per caricare "fisicamente" l'immagine devi appunto usare Image.FromFile oppure il costruttore di Bitmap, a quel punto puoi anche salvarla. Puoi sostituire il codice che hai postato con quest'altro, per avitare lavoro inutile (disegnare con una penna trasparente non ha molto senso, no? ):

'Carica l'immagine dal file Dim sfondoImg As Image = Image.FromFile("D:\Ninfee.jpg") 'Mostra l'immagine nella PictureBox tuaPictureBox.Image = sfondoImg 'Salva l'immagine sfondoImg.Save("D:\MASTEREASY\Catalogo\Ninfee.jpg")

Luca

DomA Profilo | Expert

eliminare l'inutile è molto, molto utile.
Grazie per l'osservazione.

Domenico
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5