PDA

View Full Version : سوال: نشون دادن عکس توی کنترل picturebox



sara_mp
یک شنبه 09 خرداد 1389, 00:04 صبح
با سلام
من توی پروژم عکی رو به همراه فیلد های دیگه توی بانک ذخیره کردم یه دکمه هم برای جستجو دارم و این کد ها رو توی اون نوشتم که همه فیلد ها رو نشون میده اما نمیدونم چه جوری اون فیلد عکس رو درون کنترل picturebox نشون بدم یعنی اونجایی که با قرمز مشخص کردم نمیدونم چه کدی باید بنویسم عکس ها رو به صورت باینری ذخیره کردم لطفا کمک کنید:افسرده:
کدی که نوشتم هم اینجوریه:

private void button6_Click(object sender, EventArgs e)
{
string conection = "Data Source=SARA-PC\\SQLEXPRESS;Initial Catalog=amuzeshgahzaban;Integrated Security=True";
SqlConnection con = new SqlConnection(conection);
if (maskedTextBox3.Text == "") { MessageBox.Show("لطفا کد را وارد نمایید"); }
else
{
con.Open();
string qury = "select * from moteqazi where codek='" + maskedTextBox3.Text + "'";
SqlDataAdapter da = new SqlDataAdapter(qury, con);
DataTable dt = new DataTable();
da.Fill(dt);
for (int i = 0; i < dt.Rows.Count; i++)
{
maskedTextBox1.Text = dt.Rows[i][0].ToString();
textBox1.Text = dt.Rows[i][1].ToString();
textBox2.Text = dt.Rows[i][2].ToString();
textBox3.Text = dt.Rows[i][3].ToString();
maskedTextBox2.Text = dt.Rows[i][4].ToString();
textBox4.Text = dt.Rows[i][5].ToString();
textBox5.Text = dt.Rows[i][6].ToString();
textBox6.Text = dt.Rows[i][7].ToString();
textBox7.Text = dt.Rows[i][8].ToString();
textBox8.Text = dt.Rows[i][9].ToString();
comboBox1.Text = dt.Rows[i][10].ToString();
pictureBox1.Image=?




}

con.Close();

if (dt.DefaultView.Count == 0) { MessageBox.Show("متقاضی با کد " + maskedTextBox3.Text + " " + "موجود نمی باشد"); }
else
{
toolStripStatusLabel2.Text = "جستجو با موفقیت انجام شد";

button3.Enabled = true;
}

}

}

Amir Oveisi
یک شنبه 09 خرداد 1389, 01:15 صبح
عکس رو به چه شکلی داخل database قرار میدید؟
آدرسش رو؟ یا اینکه []byte ؟

sara_mp
یک شنبه 09 خرداد 1389, 06:21 صبح
عکس ها رو به صورت [] byte توی databaseذخیره میکنم

M.YasPro
یک شنبه 09 خرداد 1389, 06:54 صبح
سلام



private bool SearchPic()
{
DataSet objDataSet;
SqlConnection objConnection = new SqlConnection("connection");
SqlCommand objCommand = new SqlCommand();
objCommand.CommandText = "select p_pic from tblPerson where p_id='" + txtid.Text + "'";//"select " + txtField.Text + " from " + txtTable.Text + " where " + txtfieldcrit.Text + "='" + txtid.Text + "'";
objCommand.Connection = objConnection;
objCommand.CommandType = CommandType.Text;
SqlDataAdapter objDataAdapter = new SqlDataAdapter();
objDataAdapter.SelectCommand = objCommand;
objDataSet = new DataSet();
objDataAdapter.Fill(objDataSet);
if (objDataSet.Tables[0].Rows.Count == 0)
return false;
Bitmap map = ByteArrayToBitmap((byte[])objDataSet.Tables[0].Rows[0][0]);
pictureBox1.Image = map;
pictureBox1.Refresh();
return true;
}

public Bitmap ByteArrayToBitmap(byte[] bytes)
{
MemoryStream ms = new MemoryStream(bytes);
BinaryFormatter formatter = new BinaryFormatter();
Bitmap map = (Bitmap)formatter.Deserialize(ms);
ms.Close();
return map;
}

public byte[] BitmapToByteArray(Bitmap map)
{
byte[] bytes;
MemoryStream ms = new MemoryStream();
BinaryFormatter formatter = new BinaryFormatter();
formatter.Serialize(ms, map);
bytes = ms.GetBuffer();
ms.Close();
return bytes;
}

sara_mp
یک شنبه 09 خرداد 1389, 11:20 صبح
ممنون از راهنمایی شما
ولی چه جوری از این کد استفاده کنم منظورم اینه که کجای کد خودم باید این کد رو قرار بدم:متفکر:

M.YasPro
یک شنبه 09 خرداد 1389, 15:49 عصر
اين موارد رو نسبت به ديتابيستون تغيير بديد :
كانكشن استرينگ ، Command.CommandText

و بايد يه pictureBox1 هم داشته باشيد
شما كجاش رو مشكل داريد ؟

sara_mp
یک شنبه 09 خرداد 1389, 17:23 عصر
سلام
ممنون از راهنماییاتون
فعلا کد شما رو طبق کد های خودم تغییر دادم یعنی در کد خودم دو خط زیر رو اضاف کردم فقط namespace های تو تا تابعByteArrayToBitmapوBitmapToByteArray رو نمیشناسه چه فضای نامی رو باید اون بالا اضاف کنم و اگه میشه در باره این دو تا تابع بیشتر توضیح بدیدمنظورم طرز کار است.

Bitmap map = ByteArrayToBitmap((byte[])dt.Rows[i][10]);
pictureBox1.Image = map;


با تشکر فراوان:خجالت:

M.YasPro
یک شنبه 09 خرداد 1389, 17:49 عصر
فكر مي كنم فضاي نام هاي

System.Runtime.Serialization.Formatters.Binary
system.io

كافي باشه.
متد ByteArrayToBitmap يه ارايه از نوع byte مي گيره و تبديل به bitmap مي كنه .
و BitmapToByteArra هم بالعكس

موفق باشيد .

sara_mp
یک شنبه 09 خرداد 1389, 18:36 عصر
برنامم توی خط Bitmap map = (Bitmap)formatter.Deserialize(ms); این ارور رو میده

The input stream is not a valid binary format. The starting contents (in bytes) are: FF-D8-FF-E0-00-10-4A-46-49-46-00-01-02-01-00-B4-00 ...

ببخشیدا ولی نمیشه یه راه ساده تر بگید ببینید اگه اولین پست رو نگاه کنید من یه خط رو با رنگ قرمز نشون دادم نمیشه همون جا یه کدی نوشت که عکس رو که به صورت باینری در بانک ذخیره شده بشه توی کنترل picture box نشون داد .
لطفا راهنمایی کنید :عصبانی++:

sara_mp
یک شنبه 09 خرداد 1389, 22:00 عصر
آیا فریادرسی است که به فریاد من برسد
خواهش میکنم کمک کنید بدجوری گیر کردم:عصبانی++::عصبانی++::گریه: :گریه::گریه:

M.YasPro
دوشنبه 10 خرداد 1389, 08:08 صبح
شما مطمئن هستي كه از فيلدتون از نوع varBinary هست ؟
راه ساده تر تينه كه ادرسشون رو ذخيره كني .

sara_mp
دوشنبه 10 خرداد 1389, 10:05 صبح
سلام
فیلد عکس من دربانک از نوع image است من عکس رو با fileopen میگیرم و آدرسش رو به تابع زیر میدم و این تابع اون رو به binary تبدیل می کنه و خود عکس رو به صورت binaryدر بانک ذخیره میکنم

byte[] ReadFile(string sPath)
{
byte[] data = null;
FileInfo fInfo = new FileInfo(sPath);
long numBytes = fInfo.Length;
FileStream fStream = new FileStream(sPath, FileMode.Open, FileAccess.Read);
BinaryReader br = new BinaryReader(fStream);
data = br.ReadBytes((int)numBytes);
return data;
}

sara_mp
دوشنبه 10 خرداد 1389, 16:14 عصر
آی ملت یعنی این سوال من جواب نداره توروخدا یکی کمک کنه :متعجب::عصبانی++:

sara_mp
دوشنبه 10 خرداد 1389, 22:24 عصر
بابا یکی نیست به من کمک کنه
یه بار دیگه سوالم رو میگم
من عکسام رو به صورت باینری توی بانک ذخیره میکنم فیلد عکسم در بانک به صورت imageاست حالا می خواهم یه select بنویسم و یه عکس رو دورن کنترل pictureboxنشون بدم
فکر نمیکنم سوالم بی ربط باشه که کسی نتونه به اون جواب بده اگه کسی بلده کدشو برام بزاره خیلی ممنون میشم .

s.khoshfekran
دوشنبه 10 خرداد 1389, 23:32 عصر
http://www.barnamenevis.org/forum/showthread.php?t=216578

sara_mp
سه شنبه 11 خرداد 1389, 09:50 صبح
با سلام
مشکل من با این چند تا خط کد حل شد این کد ها رو اینجا میزارم تا بقیه هم استفاده کنند

MemoryStream Memory = new MemoryStream();
byte[] ByteArray1 = (byte[])dataGridView1.Rows[e.RowIndex].Cells[0].Value;
Memory.Write(ByteArray1, 0, ByteArray1.Length);
pictureBox2.Image = Image.FromStream(Memory);

sara_mp
سه شنبه 11 خرداد 1389, 09:58 صبح
البته اگه بخاهیم عکس رو از datatableبخونیم کدش این جوری میشه

MemoryStream Memory = new MemoryStream();
byte[] ByteArray1 = (byte[])dt.Rows[i][11];
Memory.Write(ByteArray1, 0, ByteArray1.Length);

pictureBox2.Image = Image.FromStream(Memory);
[/quote]
متغیر i ثابته ولی متغیر j بسته به تعداد داده ها توی datatable تغییر میکنه:تشویق::تشویق::تشویق: