Visualizzare piccoli preview immagine come in Picasa o Photoshop Light...

lunedì 24 agosto 2009 - 21.47

maxprogrammer94 Profilo | Newbie

Qualcosa simile a queste immagini:

http://www.file-extensions.org/imgs/app-picture/4114/adobe-photoshop-lightroom.png

http://www.downpanda.com/image/picasa.jpg


Ciao
Sara
Canducci Sara

freeteo Profilo | Guru

Ciao,
puoi pensare di farti fare la Thumbnail direttamente dal file su disco, e poi andare a ripetere l'elemento, o meglio ancora farlo diventare un controllo.
Cmq il codice per farti la Thumb è abbstanza semplice, ossia ti basta chiamare il metodo "GetThumbnailImage" dell'oggetto Image del frameowrk.

Dopodichè ti basta metterla come sorgente di una pictureBox e quindi andare a ripetere quel controllo (o il tuo usercontrol che la contiene) n volte quante sono le immagini, e aggiungendole ad un pannello e impostandone il dock sempre a sinistra, dovresti riuscire a non preoccuparti del resize del pannello:
foreach (string file in Directory.GetFiles(@"c:\...\")) { using (Image img = Bitmap.FromFile(file)) { PictureBox p = new PictureBox(); p.SizeMode = PictureBoxSizeMode.AutoSize; p.Margin = new Padding(10); p.Dock = DockStyle.Left; p.Image = img.GetThumbnailImage(100, 100, null, IntPtr.Zero); pannello.Controls.Add(p); } }

Se invece stai usando WPF allora niente di più semplice ti basta lavorare con il binding e in 5 min hai fatto tutto...

Ciao.

Matteo Raumer
[MVP Visual C#]
http://blogs.dotnethell.it/freeteo

maxprogrammer94 Profilo | Newbie

Thank you! seguendo il tuo aiuto ho risolto in questo modo:

openFileDialog1.Multiselect = true;
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
for (int i = 0; i < openFileDialog1.FileNames.Length; i++)
{
using (Image img = Bitmap.FromFile(openFileDialog1.FileNames[i]))
{
Panel contPan = new Panel();
contPan.AutoSize = true;
contPan.Dock = DockStyle.Left;

PictureBox p = new PictureBox();
p.SizeMode = PictureBoxSizeMode.Zoom;
p.Margin = new Padding(100);
p.Dock = DockStyle.Right;

if (img.Width > img.Height)
{
double factor = (double)img.Width / 100.0;
p.Image = img.GetThumbnailImage(100, (int)(img.Height / factor), null, IntPtr.Zero);
}
else
{
double factor = (double)img.Height / 100.0;
p.Image = img.GetThumbnailImage((int)(img.Width / factor), 100, null, IntPtr.Zero);
}

Panel pan = new Panel();
pan.Dock = DockStyle.Left;
pan.Size = new Size(19, 19);

contPan.Controls.Add(p);
contPan.Controls.Add(pan);

pannello.Controls.Add(contPan);
contPan.BringToFront();
}
}
pannello.AutoScroll = true;
}


Grazie ancora!
(ho fatto un po' di modifiche al tuo in modo che non slabrasse le immagini, ma che rilevasse la loro dimensione originale)

Ciao
Canducci Sara
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-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5