سلام دوستان
ممکنه شما هم به این مشکل هنگام ساخت برنامه های مبتنی بر بانک اطلاعاتی بر خورده باشین که چگونه تصاویر رو ذخیره کنیم؟ و چگونه اونها رو بازخوانی کنیم؟ آیا ذخیره آدرس عکس کافیه یا راه حل بهتری وجود داره؟
جواب: برای کار با عکس در برنامه های بانک اطلاعاتی، بهترین راه اینه که خود عکس رو در بانک اطلاعاتی ذخیره کنید تا با مشکلاتی مثل «عدم دسترسی به دیسک سخت» یا «کمبود حافظه» و مشکلاتی از این قبیل روبرو نشین.
برای مثال، در یک برنامه «دفترچه تلفن»، درصورتی که بخواهید عکس مخاطب رو در بانک SQL ذخیره کنید، کافیه در Table مربوطه یک فیلد از نوع Image داشته باشید. و در فرم ورود اطلاعات، یک PictureBox قرار بدین و خاصیت Image اون رو به فیلدی که قبلاً در بانک تعریف کرده بودین مرتبط کنین.
حالا اگر با استفاده از کد یک عکس رو در PictureBox نمایش بدین، این عکس به صورت خودکار در بانک ذخیره میشه و موقع بازخوانی هم به طور خودکار در PictureBox به نمایش در میاد.
چند نکته تخصصی
- فرمت Image چه نوع داده ای رو در بانک ذخیره میکنه و این عکس چگونه در بانک اطلاعاتی ذخیره میشه؟
- PictureBox این نوع داده ای رو چگونه به عکس تبدیل می کنه؟
بگذارید به نحوه ذخیره سازی عکس در بانک اطلاعاتی کمی آشناتر بشیم.
اگر در SQL به مقدار ذخیره شده در فیلد تصویری دقت کنید، متوجه میشین که SQL تصویر رو به صورت آرایه ای از نوع Byte ذخیره کرده که درواقع همون محتوای فایل عکس هستش.
برای تبدیل این بایت ها به تصویر قابل نمایش در PictureBox و یا به عبارت بهتر تبدیل به یک شی Bitmap، بهترین و سریعترین راه حل اینه که اونها رو توسط یک MemoryStream خوانده و به Stream تبدیل کنیم. سپس توسط متد FromStream کلاس Bitmap، اونها رو به یک شی Bitmap تبدیل می کنیم:
Bitmap bit = new Bitmap(Bitmap.FromStream(memStream));
حالا میتونین با شی Bitmap ایجاد شده، تغییراتی رو که لازمه در عکس انجام بشه رو انجام بدین.
در پایان نیز، برای ذخیره دوباره عکس در Database باید عکس رو به یک MemoryStream تبدیل و توسط متد ToArray اون رو به آرایه ای از نوع Byte تبدیل کنیم:
bit.Save(memStream2, ImageFormat.Bmp);
byte[] pictureBytes2 = memStream2.ToArray();
توجه داشته باشین که متد Save شی Bitmap، میتونه تصویر موجود در این شی رو در یک فایل ویا Stream ذخیره کنه و پارامتر دوم اون، نوع تصویر ذخیره شده رو مشخص می کنه.
موفق باشید و خدا نگهدار
No comments:
Post a Comment