PDA

View Full Version : فراخوانی عکس در picturebox بدون در نظر گرفتن فرمت عکس



alasht
شنبه 12 تیر 1389, 20:38 عصر
سلام
من یه قسمت سرچ ساختم که میخوام وقتی سرچ انجام شد عکس طرف هم نشون بده
در یک تاپیک دیگه با دوستان تلاش کردیم که اسم عکس رو با شماره ID دیتابیس یکی کنیم که تاپیک به نتیجه رسید و این کار جالب انجام شد.
حالا من با این کد عکس کسی که سرچ روش انجام شده رو تو picture box فراخونی میکنم
picsearch.Image = Image.FromFile(Application.StartupPath + "\\userpic\\" + datar["ID"].ToString());

ولی این کد غلطه چون فرمت عکس مجهوله یعنی من اگه بخوام عکسو نشون بده و برنامه ارور نده باید کد رو اینطوری وارد کنم

picsearch.Image = Image.FromFile(Application.StartupPath + "\\userpic\\" + datar["ID"].ToString() + ".jpg");

که این فقط برای فرمتهای مشخص شده جواب میده و اصلا کار حرفه ای نیست و بدرد نمیخوره
چیکار کنم به نظر شما که فرمت عکس رو در نظر نگیره و فقط طبق اسم عکس جستجو کنه ؟

اینم یاداوری کنم که datar["ID"].ToString() اسم عکس منه
منتظر پاسخهای مفید شما هستم
با تشکر :قلب:

mmd2009
شنبه 12 تیر 1389, 20:53 عصر
خب دوست عزیز موقع ثبت عکس پسوند رو هم مشخص میکردی .

alasht
شنبه 12 تیر 1389, 21:09 عصر
متوجه منظورتون نمیشم ؟
یعنی چی ؟

mmd2009
شنبه 12 تیر 1389, 22:39 عصر
میگم موقعی که داری عکس رو ثبت میکنی پسوند عکس رو هم باحاش ثبت کن که وقتی میخوای براخوانی کنی عکس رو پسوند خودش هم باحاش بیاد

امیدوارم منظورمو رسونده باشم

alasht
یک شنبه 13 تیر 1389, 09:51 صبح
سلام
دوست عزیز من موقع ثبت می تونم با سه فرمت عکسمو ثبت کنم jpg,png,gif حالا موقع جستجو به مشکل برمی خورم شاید مثلا عکس شماره 10 اینطوری باشه

10.jpg
و عکس شماره 11 اینطوری

11.png

موقع جستجو من از این کد استفاده میکنم

picsearch.Image = Image.FromFile(Application.StartupPath + "\\userpic\\" + datar["ID"].ToString() + ".jpg");


ولی این برای jpg جواب میده اگه عکسمون png باشه برنامه ارور میده امیدوارم متوجه منظورم شده باشید و بتونید با یک مثال کامل برام توضیح بدید
با تشکر

syntiberium
یک شنبه 13 تیر 1389, 10:05 صبح
یا عکس png شما مشکل داره یا visual studio تون مشکل داره چون من png و gif را با همان روش خودتان تست کردم و هیچ مشکلی نداشت .

alasht
یک شنبه 13 تیر 1389, 10:21 صبح
نه !
ببینید مثلا عکس شما اسمش اینه

11.pngحالا اگه من با اون کد عکسمو فراخوانی کنم میشه

11.jpgکه اینطوری فرمت عکس بهم میخوره و برنامه ارور میده

منظور کلیم اینه وقتیکه عکس ما این هست

11.pngوقتی اینجوری فراخوانی بشه

11.jpgبرنامه سرچ میکنه میبینه همچین عکسی وجود نداره و بنابراین ارور میده
امیدورام متوجه منظورم شده باشید

mmd2009
یک شنبه 13 تیر 1389, 11:27 صبح
میشه کد ثبت رو بذارید تا ببینیمش؟

alasht
یک شنبه 13 تیر 1389, 11:39 صبح
کد فراخوانی عکس با openfiledialog

private void btnopen_Click(object sender, EventArgs e)
{
dialog1.Filter = "JPEG File (*.jpg)|*.jpg|BITMAP File (*.bmp)|*.bmp|PNG File (*.png)|*.png";
if (dialog1.ShowDialog() == DialogResult.OK)
{

txtadres.Text = dialog1.FileName;
pic1.Image = Image.FromFile(dialog1.FileName);

}
}

کد ذخیره عکس فراخوانی شده

private void savepic1()
{

//////////////////////////////////////////////////////////////////////////////////////////
string contodb2 = "Provider = Microsoft.Jet.OLEDB.4.0;Data Source = " +
Application.StartupPath + "\\mydb.mdb";
OleDbConnection connect2 = new OleDbConnection(contodb2);
if (connect2.State == ConnectionState.Closed) connect2.Open();


OleDbCommand cmd = new OleDbCommand();
OleDbConnection con = new OleDbConnection();
con.ConnectionString = contodb2;
con.Open();
cmd.CommandText = "select max(ID) from mytb";
cmd.Connection = con;
File.Copy(txtadres.Text, Application.StartupPath + "\\Image\\" + cmd.ExecuteScalar().ToString() + Path.GetExtension(txtadres.Text), true);
//////////////////////////////////////////////////////////////////////////////////////////
}


این هم کد جستجوی عکس

private void btn_search_Click(object sender, EventArgs e)
{
string contodb = "Provider = Microsoft.Jet.OLEDB.4.0;Data Source = " +
Application.StartupPath + "\\mydb.mdb";
OleDbConnection connect = new OleDbConnection(contodb);
if (connect.State == ConnectionState.Closed) connect.Open();
string select_search = "select * From mytb where ";
if (txt_search_name.Text != string.Empty && txt_search_famil.Text != string.Empty)
{
select_search += " nam ='" + txt_search_name.Text.Trim() + "' and famil='" + txt_search_famil.Text.Trim() + "'";
}
else if (txt_search_name.Text != string.Empty)
{
select_search += " nam ='" + txt_search_name.Text.Trim() + "'";

}
else
{
select_search += " famil ='" + txt_search_famil.Text.Trim() + "'";
}
OleDbCommand mycommand = new OleDbCommand();
mycommand.CommandText = select_search;
mycommand.Connection = connect;
OleDbDataReader datar;
datar = mycommand.ExecuteReader();
datar.Read();
picsearch.Image = Image.FromFile(Application.StartupPath + "\\userpic\\" + datar["ID"].ToString() + ".jpg");
OleDbDataAdapter dataad_1 = new OleDbDataAdapter(select_search, connect);
DataSet dataset_1 = new DataSet();
dataad_1.Fill(dataset_1, "search");
datagrid2.AutoGenerateColumns = false;
datagrid2.DataSource = dataset_1.Tables["search"];
connect.Close();
}

hojjatshariffam
یک شنبه 13 تیر 1389, 11:59 صبح
11. OleDbCommand cmd = new OleDbCommand();
12. OleDbConnection con = new OleDbConnection();
13. con.ConnectionString = contodb2;
14. con.Open();
15. cmd.CommandText = "select max(ID) from mytb";
16. cmd.Connection = con;
17. File.Copy(txtadres.Text, Application.StartupPath + "\\Image\\" + cmd.ExecuteScalar().ToString() + Path.GetExtension(txtadres.Text), true);
18. //////////////////////////////////////////////////////////////////////////////////////////
19.}



دوست من قسمت قرمز کدتو عوض کن تا همشون با فرمت Jpg ذخیره بشن
اونوقت دیگه مشکلی نداره ، یعنی خودت همیشه عکس رو با فرمت خاص ذخیره کن و با فرمت خاص هم بخون

یا اینکه می تونی چند تا فرمت خاص رو پشت سر هم در Try های تو در تو بزاری تا اگه یکی خطا داد بره سراغ نوع دیگه

alasht
یک شنبه 13 تیر 1389, 12:10 عصر
سلام
ممنون از پاسختون
من این کارو اگه بکنم برای عکسها مشکلی پیش نمیاد ؟
یعنی اگه فرمت عکس gif باشه از نوع عکس متحرک اونوقت به jpg تبدیل کنم مشکل پیش نمیاد ؟

mmd2009
یک شنبه 13 تیر 1389, 13:42 عصر
دوست عزیز اگر عکس رو موقعی که انتخاب میکنی بخوای سیوش کنی از این روش کد نویسی استفاده بکنی شاید بهتر باشه

البته امیدوارم دوستان نظر بهتری داشته باشن




OpenFileDialog ofd = new OpenFileDialog();
if ((ofd.FileName.EndsWith(".jpg")))
{
//عملیات ثبت
}
else if ((ofd.FileName.EndsWith(".bmp")))
{
//عملیات ثبت
}
else if ((ofd.FileName.EndsWith(".png")))
{
//عملیات ثبت
}

hojjatshariffam
یک شنبه 13 تیر 1389, 21:20 عصر
سلام
ممنون از پاسختون
من این کارو اگه بکنم برای عکسها مشکلی پیش نمیاد ؟
یعنی اگه فرمت عکس gif باشه از نوع عکس متحرک اونوقت به jpg تبدیل کنم مشکل پیش نمیاد ؟

در مور عکس متحرک نظری ندارم ولی در مورد بقیه فرمت ها می تونی همشونو به JPG تبدیل کنی
البته ذخیرش به این صورت نیست که کپی کنی ، باید فایل رو بخونی بعد ذخیره کنی ، یک اوور لود واسه تعیین نوع ذخیره سازی تصوری وجود داره که :



PictureBox1.Image.Save("Path", System.Drawing.Imaging.ImageFormat.Jpeg);

codelover
یک شنبه 13 تیر 1389, 21:32 عصر
دوست عزیز سلام

خیلی راحت میتونی اصلا پسوند رو ننویسی
یعنی بدون پسوند بخون و بنویسش
اینجوری اسمت عکسات منحصر به فرد می شه خود برنامه میفهمه که فرمت عکس چیه و باز می کنه ولی پسوندش مشخص نمی شه

HAMRAHSOFT.IR
یک شنبه 26 تیر 1390, 13:55 عصر
شرمنده نخواستم تایپک جدادرست کنم گفتم سوالم اینجا بپرسم بهتر شاید

این کد برای نمایش عکس استفاده مکنم
pic.Image = Image.FromFile(Environment.CurrentDirectory +@"\Image\" + txtcodemelly.Text + ".jpg");

حلا چطور متونم بفهم اگه عکسی وجود نداشت که بتونه لود کنه خطا نده
این فیلد txtcodemelly.Text در واقع اسم فایل عکس من

Farshid007
یک شنبه 26 تیر 1390, 15:35 عصر
شرمنده نخواستم تایپک جدادرست کنم گفتم سوالم اینجا بپرسم بهتر شاید

این کد برای نمایش عکس استفاده مکنم
pic.Image = Image.FromFile(Environment.CurrentDirectory +@"\Image\" + txtcodemelly.Text + ".jpg");

حلا چطور متونم بفهم اگه عکسی وجود نداشت که بتونه لود کنه خطا نده
این فیلد txtcodemelly.Text در واقع اسم فایل عکس من
خیلی ساده:
1- می تونی داخل بلاک try catch بزاری وقتی Catch اجرا بشه یعنی فایل وجود نداره
2-
if (System.IO.File.Exists("Environment.CurrentDirectory" + @"\Image\" + txtcodemelly.Text + ".jpg"))
{
pic.Image = Image.FromFile(Environment.CurrentDirectory + @"\Image\" + txtcodemelly.Text + ".jpg");

}
else
{
MessageBox.Show("File Not Found", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}