تصاویر
ذخیره تصویر از Clipboard در فایل به کمک سی شارپ
همان طوری که می دانید Clipboard مجموعه ای از توابع و پیام هاست که به برنامه ها اجازه نقل و انتقال داده را می دهد، چون همه برنامه ها به Clipboard دسترسی دارند انتقال اطلاعات بین چند برنامه یا یک برنامه خاص به سادگی صورت می گیرد.
این یادداشت توضیح می دهد که داده های Clipboard را چگونه به کمک سی شارپ مدیریت و در فایل ذخیره کنیم.
در این نوشته من از کلاس System.Windows.Forms.Clipboard استفاده خواهم کرد.
این کلاس متدهایی برای قرار دادن و بازیابی اطلاعات موجود در Clipboard برای ما فراهم می کند.
تمام متدهای فراهم شده توسط این کلاس استاتیک هستند به این معنی که برای استفاده از آن ها نیازی ندارید که یک شی از این کلاس بسازید.
و اما کد برنامه
کد:
if (Clipboard.GetDataObject() != null)
{
IDataObject data = Clipboard.GetDataObject();
if (data.GetDataPresent(DataFormats.Bitmap))
{
Image image = (Image)data.GetData(DataFormats.Bitmap,true);
image.Save("image.bmp",System.Drawing.Imaging.ImageFormat.Bmp);
image.Save("image.jpg",System.Drawing.Imaging.ImageFormat.Jpeg);
image.Save("image.gif",System.Drawing.Imaging.ImageFormat.Gif);
}
else
{
MessageBox.Show("The Data In Clipboard is not as image format");
}
}
else
{
MessageBox.Show("The Clipboard was empty");
}
حالا توضیح برنامه :
- متد GetDataObject() اطلاعاتی که درون Clipboard هست را نشان می دهد بنابراین می توانیم از آن برای گرفتن داده های درون Clipboard یا چک کردن وجود داده در آن استفاده کنیم.
- چون داده هایی که درون Clipboard قرار می گیرند از انواع داده ای مختلفی هستند این متد یک داده از نوع IDataObject برمی گرداند بنابراین من یک شی از نوع اینترفیس IDataObject ساختم و آن را بوسیله مقدار بازگشتی از تابع etDataObject() مقدار دهی اولیه کردم:
IDataObject data = Clipboard.GetDataObject();
- بعد از این ما می توانیم شی data را برای مدیریت اطلاعاتی که از GetDataObject() یا Clipboard می آیند استفاده کنیم.
- حالا نوع این داده که در شی data قرار گرفته است را بررسی می کنیم:
if (data.GetDataPresent(DataFormats.Bitmap))
یا آن را به یک فرمت مناسب مثل فرمت تصویری تبدیل می کنیم :
Image image = (Image)data.GetData(DataFormats.Bitmap,true);
اگر فرمت داده ما ماهیت تصویری نداشته باشد این مطلب را به کمک یک Message Box به کاربر اعلام می کنیم:
MessageBox.Show("The Data In Clipboard is not as image format");
توضیح: منبع این مطلب ، سایت C# Help بود. برای دریافت سورس این برنامه می توانید
ذخیره تصویر کاربران یاهو مسنجر
در صورتی که از کاربران یاهو مسنجر باشید، حتما با Avatar یا عکسی که به هنگام چت کردن در کنار ID افراد نمایش داده می شود، آشنا هستید. شما با این ابزار که از یاهو مسنجر 7 افزوده شده است، هنگام چت کردن با طرف مقابل می توانید عکسی با اندازه نسبتا کوچک را در صفحه چت خود قرار دهید. اما به طور طبیعی این عکس را نمی توان با یاهو مسنجر روی هارد ذخیره کرد و تنها می توان آن را مشاهده کرد. روشی را به شما معرفی می کنیم که در عین سادگی می توانید تصویر هر ID را که بخواهید، دریافت و روی هارد ذخیره کنید.
برای این کار کافی است از طریق مرورگر خود به آدرس www.invisible.ir/dicatcher مراجعه کنید.اکنون در فیلد yahoo!ID آیدی مورد نظر را وارد و سپس روی دکمه ذره بین کلیک کنید یا Enter بزنید.پس از چند ثانیه تصویر ID شخص مورد نظر ظاهر می شود اکنون روی عکس راست کلیک و آن را Save کنید. عکس در همان اندازه استاندارد یاهو مسنجر است، شما می توانید به وسیله نرم افزارهای تخصصی همانند فتوشاپ، تصویر را با کاهش نسبی کیفیت عکس بزرگ تر کنید.
ذخیره تصاویر در SQL Server
چند روز پیش یکی از دوستانم در دانشگاه از من سوالی در مورد نحوه ذخیره تصاویر در SQL Server پرسید. من می دانستم که نوع داده ای image برای انجام این کار استفاده می شود ولی هیچ گاه از آن استفاده نکرده بودم و بنابراین هیچ ایده ای از نحوه ارسال اطلاعات برای ذخیره شدن در بانک اطلاعاتی نداشتم. فردای آن روز ایمیلی به دوستم زدم و لینک یک مقاله خوب از codeproject را برایش فرستادم که نحوه انجام این کار را توضیح می داد. به نظرم آمد که آن مقاله را برای وبلاگم هم ترجمه کنم. این مقاله یک سورس هم دارد که می توانید آن را از اینجا دانلود کنید.
مرور راه حل
به طور معمول، تصاویر در پوشه های روی وب سرور ذخیره می شوند نه در دیتابیس، این اما برای فایل های با حجم بالاست. در بعضی موارد ، مثلا یک بانک ، آن ها از تصویر امضای مشتری اسکن می گیرند و آن را در بانک اطلاعاتی خود ذخیره می کنند.
- الگوی بانک اطلاعاتی مورد استفاده : مایکروسافت SQL Server 2000 را به عنوان بانک اطلاعاتی استفاده می کنیم، من از نوع داده ای image استفاده خواهم کرد. نوع داده ای image برای ذخیره کردن تصاویر در بانک اطلاعاتی استفاده می شود.
- کنترل هایی که در این برنامه از آن ها استفاده می کنیم عبارتند از : System.Web.UI.HtmlControls.HtmlInputFile و System.Web.UI.WebControls.TextBox و System.Web.UI.WebControls.Button
-و فضا نام هایی که در این برنامه از آن ها استفاده می کنیم عبارتند از: System.Data.SqlClient و System.Drawing و System.Data و System.IO و System.Drawing.Imaging
راه حل همراه با کد
از کلاس HtmlInputFile برای ساختن کنترل آپلود فایل استفاده می کنیم. مثال زیر یک فایل ASPX کامل است که به کاربر این امکان را می دهد که یک تصویر و توضیح آن را آپلود و به بانک اطلاعاتی اضافه کند . متد OnUpload تصویر و توضیح آن را در یک جدول بانک اطلاعاتی SQL Server به نام Pictures در دیتابیس MyData اضافه می کند.