PDA

View Full Version : مبتدی: ذخیره و بازیابی عکس



Aqeel95
سه شنبه 04 فروردین 1394, 02:30 صبح
سلام
اول از همه اینو بگم:
ت. سایت خییییییلی گشتم درمورد این مطلب اما تایپکی پیدا نکردم که یه نفر فقط کد رو نوشته باشه
دوستان لطف کردن و نوشتن سرچ کنید یا خییییلی سخت توضیح دادن:متفکر:

هیچکسی از همون اول که ب دنیا اومده برنامه نویس نبوده
***************
واما سوال یا یه جورایی درخواستم
آدرس عکس رو توی sql ذخیره کردم. (به این دلیل این روش رو انتخاب کردم چون کاربر برنامه خودم هستم برای همین اگر آدرس تغییر بکنه یا هر اتفاقی برای عکس بیافته ، با این امکان که تو برنامه بشه عکس رو حذف کرد یا آپدیت کرد، از ایجاد مشکل دربرنامه جلوگیری میشه)
حالا میخوام که عکس رو توی #c نمایشش بدم.
اگر کد بنویسید که عالیه و مچکر میشم از همین الان ولی اگه آدرس تایپک میخواید بدید، لطفا ساده توضیح داده باشه(چیزی که من پیدا نکردم :متفکر:)

fool66
سه شنبه 04 فروردین 1394, 02:47 صبح
سلام
من این پروژه رو قبلا دانلود کردم ببین به کارت میاد

Mofid.m
سه شنبه 04 فروردین 1394, 02:56 صبح
سلام دوست من
ببین برای این کار من به مثال میزنم.
من یه فرم دارم و توش یه دکمه و یه pictureBox دارم
میخوام وقتی روی این دکمه کلیک کنم این تصویر برام نمایش داده بشه.
حالا آدرس این تصویر از کجا میاد زیاد مهم نیست.
من فرض رو بر این میزارم که شما میتونی اون فیلد آدرس رو بخونی از دیتابیس و در یه متغیر ذخیره کنی و مثلا ایم اون متغیر رو بزاری PicPath

حالا این کدو برای رویداد کلیک باتن بنویسیم اون تصویر توی pictureBox نمایش داده میشه.


pictureBox1.Image = Image.FromFile(PicPath);
pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;

Aqeel95
سه شنبه 04 فروردین 1394, 16:25 عصر
سلام
من این پروژه رو قبلا دانلود کردم ببین به کارت میاد

سلام
خیلی ممنون
این برنامه که قرار دادید با استفاده از ذخیره binary عکس انجام شده
من آدرس عکس رو ذخیره میکنم در برنامم

ghasem110deh
سه شنبه 04 فروردین 1394, 17:47 عصر
سلام
با اجازه دوستان ...
-------------------- ذخیره آدرس عکس و نمایش در سی شارپ :
البته نمی دونم این تاپیک رو دیدی یا نه ... ولی توضیحش خوبه ! اگه جایی رو سوال دداشتی بپرسید :

http://barnamenevis.org/showthread.php?407106-%D8%B0%D8%AE%DB%8C%D8%B1%D9%87-%D8%AA%D8%B5%D9%88%DB%8C%D8%B1-%D8%AF%D8%B1-%D8%A8%D8%A7%D9%86%DA%A9-(%D8%A2%D8%AF%D8%B1%D8%B3-%D8%B9%DA%A9%D8%B3-%D8%B0%D8%AE%DB%8C%D8%B1%D9%87-%D9%85%DB%8C%D8%B4%D9%87-%D9%88-%D8%A7%D8%B2-%D8%B7%D8%B1%DB%8C%D9%82-%D8%A2%D8%AF%D8%B1%D8%B3-%D8%B9%DA%A9%D8%B3-%D8%B1%D8%A7-%D9%84%D9%88%D8%AF-%D9%85%DB%8C%DA%A9%D9%86%DB%8C%D9%85)

و اینم یه نمونه (البته با بانک اکسس) :

http://video-learn.ir/post/235

Aqeel95
چهارشنبه 05 فروردین 1394, 22:04 عصر
سلام
با اجازه دوستان ...
-------------------- ذخیره آدرس عکس و نمایش در سی شارپ :
البته نمی دونم این تاپیک رو دیدی یا نه ... ولی توضیحش خوبه ! اگه جایی رو سوال دداشتی بپرسید :

http://barnamenevis.org/showthread.php?407106-%D8%B0%D8%AE%DB%8C%D8%B1%D9%87-%D8%AA%D8%B5%D9%88%DB%8C%D8%B1-%D8%AF%D8%B1-%D8%A8%D8%A7%D9%86%DA%A9-(%D8%A2%D8%AF%D8%B1%D8%B3-%D8%B9%DA%A9%D8%B3-%D8%B0%D8%AE%DB%8C%D8%B1%D9%87-%D9%85%DB%8C%D8%B4%D9%87-%D9%88-%D8%A7%D8%B2-%D8%B7%D8%B1%DB%8C%D9%82-%D8%A2%D8%AF%D8%B1%D8%B3-%D8%B9%DA%A9%D8%B3-%D8%B1%D8%A7-%D9%84%D9%88%D8%AF-%D9%85%DB%8C%DA%A9%D9%86%DB%8C%D9%85)

و اینم یه نمونه (البته با بانک اکسس) :

http://invalid.ads/post/235

ابتدای مر خیلی ممنون از پاسختون
لینک دوم که گذاشتید کار نکرد :(
تایپک اول هم که گذاشتید فکرکنم بالغ بر 5بار کل تایپک رو خوندم :))
تو آموزشی که دادن اون دوستمون در اون تایپک ، اولا اینکه اصلا از sql بازیابی انجام نداده و یکم پیشرفته توضیح دادن :(

Aqeel95
چهارشنبه 05 فروردین 1394, 22:14 عصر
سلام دوست من

من فرض رو بر این میزارم که شما میتونی اون فیلد آدرس رو بخونی از دیتابیس و در یه متغیر ذخیره کنی و مثلا ایم اون متغیر رو بزاری PicPath


چرا دروغ
دقیقا یکی از مشکلاتم اینه که اون فیلد رو از sql بخونم
طبیعتا باید از select استفاده کنم.(اگر اشتباه میکنم تصحیح کنید بیزحمت) ولی شما که الان گفتید بریزمش مثلا توی picpath مشغله ی ذهنم دوتا شد:قهقهه:
اگه کمی بیشتر توضیح بفرمایید ممنون میشم

Aqeel95
چهارشنبه 05 فروردین 1394, 22:23 عصر
خیلی ممنون از سه دوست عزیز ی که پاسخ دادن
همون طور که گفته بودم آدرس هکس رو ذخیره کردم
حالا کاربر در صفحه search با جستجو اطلاعات، اطلاعات رو در DataGridView میبینه و با انتخاب یک ردیف با توجه به نام موجود در اون ردیف عکس های مربوط به اون اسم در Picturebox نمایش داده میشه
(در sql جدول عکس دوتا ستون pic دارم و name)
و با توجه به اینکه هر کاربر (name) ممکنه هر چند عکس داشته باشه با زدن دکمه های next , preview عکس های قبلی و بعدی رو میبینه

aidivandi
یک شنبه 09 فروردین 1394, 11:09 صبح
این کد کامل برای دخیره عکس بصورت باینری در بانک اطلاعاتی و بازیابی ان و نمایش مجدد
//تبدیل عکس به صورت بایت برای ذخیره در بانک
public byte[] imageToByteArray(System.Drawing.Image imageIn)
{
MemoryStream ms = new MemoryStream();
imageIn.Save(ms, ImageFormat.Jpeg);
return ms.ToArray();
}
//-----------------------------------------------------------
//تبدیل بایت ذخیره شده در بانک به عکس متناظر با آن
public Image byteArrayToImage(byte[] byteArrayIn)
{
MemoryStream ms = new MemoryStream(byteArrayIn);
Image returnImage = Image.FromStream(ms);
return returnImage;
}
حال نحوه استفاده از توابع فوق
Array mm;
Image PicName;
pictureBox1.ImageLocation = "";
pictureBox1.ImageLocation = openFileDialog1.FileName;
textBox1.Text = pictureBox1.ImageLocation;
PicName = Image.FromFile(openFileDialog1.FileName.ToString() .Trim());
mm = imageToByteArray(PicName);
SqlCmd.Parameters.Add("@PicPer", SqlDbType.Image).Value = mm;
این برای ارسال به بانک اطلاعاتی
-----------------------------------------------------------------------------------------------
Array MyPic;
Image PicName;
StrCmdRep= "";
StrCmdRep = "SELECT PicPersonel FROM PersonelTbl ";
StrCmdRep += "WHERE PersonelTbl.Id=" + MyPerId + ") ";
SqlCmdRep = new SqlCommand(StrCmdRep, myCnn);
MyCnn.Close();
MyCnn.Open();
mm = (Array)SqlCmdRep.ExecuteScalar();

if (mm != null)
{
ReturnImag = byteArrayToImage((byte[])mm);
pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;
pictureBox1.Image = ReturnImag;
}
این هم کد نمایش عکس ذخیره شده در بانک

Aqeel95
دوشنبه 10 فروردین 1394, 16:16 عصر
این کد کامل برای دخیره عکس بصورت باینری در بانک اطلاعاتی و بازیابی ان و نمایش مجدد
//تبدیل عکس به صورت بایت برای ذخیره در بانک
public byte[] imageToByteArray(System.Drawing.Image imageIn)
{
MemoryStream ms = new MemoryStream();
imageIn.Save(ms, ImageFormat.Jpeg);
return ms.ToArray();
}
//-----------------------------------------------------------
//تبدیل بایت ذخیره شده در بانک به عکس متناظر با آن
public Image byteArrayToImage(byte[] byteArrayIn)
{
MemoryStream ms = new MemoryStream(byteArrayIn);
Image returnImage = Image.FromStream(ms);
return returnImage;
}
حال نحوه استفاده از توابع فوق
Array mm;
Image PicName;
pictureBox1.ImageLocation = "";
pictureBox1.ImageLocation = openFileDialog1.FileName;
textBox1.Text = pictureBox1.ImageLocation;
PicName = Image.FromFile(openFileDialog1.FileName.ToString() .Trim());
mm = imageToByteArray(PicName);
SqlCmd.Parameters.Add("@PicPer", SqlDbType.Image).Value = mm;
این برای ارسال به بانک اطلاعاتی
-----------------------------------------------------------------------------------------------
Array MyPic;
Image PicName;
StrCmdRep= "";
StrCmdRep = "SELECT PicPersonel FROM PersonelTbl ";
StrCmdRep += "WHERE PersonelTbl.Id=" + MyPerId + ") ";
SqlCmdRep = new SqlCommand(StrCmdRep, myCnn);
MyCnn.Close();
MyCnn.Open();
mm = (Array)SqlCmdRep.ExecuteScalar();

if (mm != null)
{
ReturnImag = byteArrayToImage((byte[])mm);
pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;
pictureBox1.Image = ReturnImag;
}
این هم کد نمایش عکس ذخیره شده در بانک

خیییییییییییلی ممنون دوست عزیز
ولی دوست عزیز
من گفتم که آدرس رو ذخیره میکنم.نه خود عکس رو!!!!!!

Share & Learn
دوشنبه 10 فروردین 1394, 17:12 عصر
آدرس عکس رو توی sql ذخیره کردم. (به این دلیل این روش رو انتخاب کردم چون کاربر برنامه خودم هستم برای همین اگر آدرس تغییر بکنه یا هر اتفاقی برای عکس بیافته ، با این امکان که تو برنامه بشه عکس رو حذف کرد یا آپدیت کرد، از ایجاد مشکل دربرنامه جلوگیری میشه)
حالا میخوام که عکس رو توی #c نمایشش بدم.
اگر کد بنویسید که عالیه و مچکر میشم از همین الان ولی اگه آدرس تایپک میخواید بدید، لطفا ساده توضیح داده باشه(چیزی که من پیدا نکردم :متفکر:)

سلام
من جواب ها رو نخوندم
اما شما باید آدرس رو از توی sql بخونید و به راحتی توی picturebox نمایشش بدید
حالا مشکل کجاست؟
شما نه کدی گذاشتید که ما برنامه تون رو ببینیم نه دقیق سوالتون رو مطرح کردید
توی این برنامه (http://barnamenevis.org/showthread.php?64210-%D9%86%D9%85%D9%88%D9%86%D9%87-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%87%D8%A7%DB%8C-%DA%A9%D9%88%DA%86%DA%A9-%D9%88-%D9%85%D9%81%D9%8A%D8%AF-%D8%AF%D8%B1-%D8%B3%D9%8A-%D8%B4%D8%A7%D8%B1%D9%BE&p=2043829#post2043829) توی رویداد btn_load_Click تقریبا کاری که می خواین انجام می شه

امیدوارم کمک کنه
موفق باشید

ویرایش:


سلام
دقیقا مشکل من همینجاست دیگه
آدرس عکس رو ذخیره کردم ولی نمیدونم چجوری بازیابیش کنم!!!!!!
برنامتون رو قبلا دانلود کرده بودم
فک کنم تو برنامه خود عکس رو ذخیره میکنید. کاری که من به دلیل تعداد زیاد عکس ها نمیتونم انجام بدم!!!!!


دوست عزیز شما تصویر رو بر چه اساسی می خواین از دیتابیس بخونید؟
بر اساس Id یا name یا ...؟
اون تیکه کدی که گفتم صرف نظر از نوع ذخیره (که خود عکس ذخیره شده باشه یا آدرسش) بهتون برای بازیابیش کمک می کنه

اگر مثلا می خواین بر اساس id بازیابی کنید، id رو انتخاب می کنید و با یه دستور select آدرس تصویری که با id یکیه رو select می کنید و بعد از اون pictureBox1.Image رو با اون عکس برابر قرار می دید


pictureBox1.Image = new Bitmap(@"ImageAddress.jpg");

Aqeel95
دوشنبه 10 فروردین 1394, 18:55 عصر
سلام
من جواب ها رو نخوندم
اما شما باید آدرس رو از توی sql بخونید و به راحتی توی picturebox نمایشش بدید
حالا مشکل کجاست؟
شما نه کدی گذاشتید که ما برنامه تون رو ببینیم نه دقیق سوالتون رو مطرح کردید
توی این برنامه (http://barnamenevis.org/showthread.php?64210-%D9%86%D9%85%D9%88%D9%86%D9%87-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%87%D8%A7%DB%8C-%DA%A9%D9%88%DA%86%DA%A9-%D9%88-%D9%85%D9%81%D9%8A%D8%AF-%D8%AF%D8%B1-%D8%B3%D9%8A-%D8%B4%D8%A7%D8%B1%D9%BE&p=2043829#post2043829) توی رویداد btn_load_Click تقریبا کاری که می خواین انجام می شه

امیدوارم کمک کنه
موفق باشید

سلام
دقیقا مشکل من همینجاست دیگه
آدرس عکس رو ذخیره کردم ولی نمیدونم چجوری بازیابیش کنم!!!!!!
برنامتون رو قبلا دانلود کرده بودم
فک کنم تو برنامه خود عکس رو ذخیره میکنید. کاری که من به دلیل تعداد زیاد عکس ها نمیتونم انجام بدم!!!!!
کد هم ننوشتم چون توضیحاتی که داده بودم تو جوابا فک کنم واضح بودن ولی به هرحال چشم
اول کاربر با کلیک insI_Pimg_Click عکس رو توی picture box قرار میده:




if (OFD.ShowDialog()==DialogResult.OK)
{
pictureBox1.ImageLocation = OFD.FileName;
img = Image.FromFile(OFD.FileName);

بعد اگر عکس رو خواست با کلید Save_img آدرس عکس رو ذخیره میکنه:





if (pictureBox1.Image==null)
{
MessageBox.Show("error");
}
else
{
sqlcom.CommandText = "insert into Tbl_Pimg (pic,name) values ('" + OFD.FileName + "','" + Txt_Sname.Text + "')";
Main_p.sqlcon.Open();
sqlcom.ExecuteNonQuery();
Main_p.sqlcon.Close();
MessageBox.Show("ok");
pictureBox1.Image = null;
}


حالا آدرس در فیلد pic ذخیره شده و اسم عکس هم تو فیلد name ذخیره شده.
اگه کد قسمت های دیگه رو هم خواستید بگید...

Mofid.m
دوشنبه 10 فروردین 1394, 20:51 عصر
سلام
این برنامه نوشتم

یه دیتابیس داره به نام PicTest و توش یه جدول به نام Pic

129897

همونطوری که میبینی سه تا فیلد داریم
id : که فیلد کلیده و identity رو برابر با Yes کردم تا خودش دونه دونه اضافه کنه.
subject : موضوع عکسه برای جستجوی عکس.
address : آدرس عکس رو ثبت میکنه.

تو پوشه Debug برنامه من یه پوشه دارم به نام Pictures که تمام عکس ها رو اونجا ذخیره میکنم.
یعنی طرف میاد اول عکس رو از جستجو میکنه از تو کامپیوترس با openfiledialog بعد ذخیره در پایگاه داده رو میزنه.
آدرس تو پایگاه داده ذخیره میشه و خود عکس تو پوشه Debug\Pictures.

توی این برنامه شما میتونی جستجو بر اساس موضوع عکس رو هم داشته باشی.

دانلودش کن و هر سوالی داری بپرس.

129898

Aqeel95
دوشنبه 10 فروردین 1394, 22:10 عصر
سلام
این برنامه نوشتم

یه دیتابیس داره به نام PicTest و توش یه جدول به نام Pic

129897

همونطوری که میبینی سه تا فیلد داریم
id : که فیلد کلیده و identity رو برابر با Yes کردم تا خودش دونه دونه اضافه کنه.
subject : موضوع عکسه برای جستجوی عکس.
address : آدرس عکس رو ثبت میکنه.

تو پوشه Debug برنامه من یه پوشه دارم به نام Pictures که تمام عکس ها رو اونجا ذخیره میکنم.
یعنی طرف میاد اول عکس رو از جستجو میکنه از تو کامپیوترس با openfiledialog بعد ذخیره در پایگاه داده رو میزنه.
آدرس تو پایگاه داده ذخیره میشه و خود عکس تو پوشه Debug\Pictures.

توی این برنامه شما میتونی جستجو بر اساس موضوع عکس رو هم داشته باشی.

دانلودش کن و هر سوالی داری بپرس.

خیییییییییییییییلی ممنونم دوست عزیز
برنامه خییییلی ساده بود و عالی
انشالله که همیشه موفق باشید