PDA

View Full Version : سوال: خطا در نمایش عکس در لیست ویو از طریق آرایه ...



ghasem110deh
چهارشنبه 22 بهمن 1393, 12:55 عصر
سلام
این دستورای خوندن و نمایشه :

private void AddImageToImageList(ImageList iml, Bitmap bm, string key, float wid, float hgt) {
Bitmap iml_bm = new Bitmap(
iml.ImageSize.Width,
iml.ImageSize.Height);
using (Graphics gr = Graphics.FromImage(iml_bm))
{
gr.Clear(Color.Transparent);
gr.InterpolationMode = InterpolationMode.High;
RectangleF source_rect = new RectangleF(0, 0, bm.Width, bm.Height);
RectangleF dest_rect = new RectangleF(0, 0, iml_bm.Width, iml_bm.Height);
dest_rect = ScaleRect(source_rect, dest_rect);
gr.DrawImage(bm, dest_rect, source_rect, GraphicsUnit.Pixel);
}
iml.Images.Add(key, iml_bm);
}


private Bitmap BytesToImage(byte[] bytes)
{
using (MemoryStream image_stream = new MemoryStream(bytes))
{
Bitmap bm = new Bitmap(image_stream);
image_stream.Close();
return bm;
}
}
private RectangleF ScaleRect(RectangleF source_rect, RectangleF dest_rect)
{
float source_aspect = source_rect.Width / source_rect.Height;
float wid = dest_rect.Width;
float hgt = dest_rect.Height;
float dest_aspect = wid / hgt;


if (source_aspect > dest_aspect)
{
hgt = wid / source_aspect;
}
else
{
wid = hgt * source_aspect;
}
float x = dest_rect.Left + (dest_rect.Width - wid) / 2;
float y = dest_rect.Top + (dest_rect.Height - hgt) / 2;
return new RectangleF(x, y, wid, hgt);
}


private void Listkala_Load(object sender, EventArgs e)
{
DGV();
comboBox1.SelectedIndex = 0;
listView1.SmallImageList = imlSmallIcons;
listView1.LargeImageList = imlLargeIcons;
listView1.MakeColumnHeaders("Id", 230, HorizontalAlignment.Left,"Cod", 220, HorizontalAlignment.Left,"Kala", 130, HorizontalAlignment.Left,
"Vahed", 230, HorizontalAlignment.Left,"Mojodi", 50, HorizontalAlignment.Right,"Pic", 60, HorizontalAlignment.Right);
SqlConnection conn;
conn = new SqlConnection("Data Source=.;Initial Catalog=AnbarDB;Integrated Security=True");
SqlCommand cmd = new SqlCommand("SELECT Id, Cod, Kala, Vahed, Mojodi, Pic FROM TKala ORDER BY Id", conn);
conn.Open();
SqlDataReader reader = cmd.ExecuteReader();
listView1.Items.Clear();
imlLargeIcons.Images.Clear();
imlSmallIcons.Images.Clear();
while (reader.Read())
{
if (!reader.IsDBNull(5))
{
Bitmap bm = BytesToImage((byte[])reader.GetValue(5));
float source_aspect = bm.Width / (float)bm.Height;
AddImageToImageList(imlLargeIcons, bm, reader[0].ToString(), imlLargeIcons.ImageSize.Width, imlLargeIcons.ImageSize.Height);
AddImageToImageList(imlSmallIcons, bm, reader[0].ToString(), imlLargeIcons.ImageSize.Width, imlLargeIcons.ImageSize.Height);
}
listView1.AddRow(reader[0].ToString(),
reader[0].ToString(),
reader[1].ToString(),
reader[2].ToString(),
reader[3].ToString(),
reader[4].ToString());
// reader[5].ToString());
}
reader.Close();
conn.Close();
}

البته جدول کالا دو سه تا فیلد دیگه هم داره ...
نمیدونم چشه !

ghasem110deh
چهارشنبه 22 بهمن 1393, 13:50 عصر
اصل برنامه اینه :

http://csharphelper.com/blog/2013/10/display-pictures-taken-from-a-database-at-runtime-in-a-listview-control-in-c/

با اکسس ...
توی جدول کالا عکس فیلد 8 هستش ...