PDA

View Full Version : نمایش عکس موجود در فیلد datagridview



mohsennajafeihodk
سه شنبه 04 مهر 1396, 09:21 صبح
با سلام
برای نمایش عکس داخل database راهنمایی کنید لطفا؟
چطوری با دابل کلیک روی فیلد عکس در datagridview عکس ذخیر شده در دیتابیس بصورت تمام صفحه با برنامه پیش فرض ویندوز(potoshop یا paint یا Windows Photo Viewer یا ....) نمایش داده بشه؟
چون می خواهم با نمایش عکس با برنامه مورد نظر امکان نمایش با قابلیت زوم، پرینت، اصلاح و ذخیره فراهم شود
البته تاپیک زیر نزدیک به این موضوع بود اما نتوانست به من کمک کند

http://barnamenevis.org/showthread.php?278878-%D9%86%D9%85%D8%A7%DB%8C%D8%B4-%D8%B9%DA%A9%D8%B3-%D8%B0%D8%AE%DB%8C%D8%B1%D9%87-%D8%B4%D8%AF%D9%87-%D8%AF%D8%B1-%D8%A8%D8%A7%D9%86%DA%A9-%D8%A7%D8%B7%D9%84%D8%A7%D8%B9%D8%A7%D8%AA%DB%8C-%D8%A8%D8%A7-%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87-%D8%A7%D8%B2-Window-Photo-Viewer&highlight=%D8%B9%DA%A9%D8%B3+%D8%AF%D8%B1+Windows+ Photo+Viewer

ممنون (http://barnamenevis.org/showthread.php?278878-%D9%86%D9%85%D8%A7%DB%8C%D8%B4-%D8%B9%DA%A9%D8%B3-%D8%B0%D8%AE%DB%8C%D8%B1%D9%87-%D8%B4%D8%AF%D9%87-%D8%AF%D8%B1-%D8%A8%D8%A7%D9%86%DA%A9-%D8%A7%D8%B7%D9%84%D8%A7%D8%B9%D8%A7%D8%AA%DB%8C-%D8%A8%D8%A7-%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87-%D8%A7%D8%B2-Window-Photo-Viewer&highlight=%D8%B9%DA%A9%D8%B3+%D8%AF%D8%B1+Windows+ Photo+Viewer)


146518

رامین مرادی
سه شنبه 04 مهر 1396, 11:46 صبح
در مورد سوال دومتون



if (e.RowIndex != -1)
{
if (e.ColumnIndex == dgv1.Columns["FileName"].Index)
{
if (File.Exists("مسیر عکس"))
{
System.Diagnostics.Process.Start("مسیر عکس");
}
else
{
MessageBox.Show("متاسفانه فایل موجود نمیباشد", "خطا", MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
}
}


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

mohsennajafeihodk
سه شنبه 04 مهر 1396, 11:55 صبح
ممنون از راهنمای شما
دستورات شما درست است
ولی هدف من نمایش عکسی هست که داخل دیتابیس بصورت بایت ذخیره شده و داخل سیستم ذخیره نشده که مسیر عکس وجود داشته باشد
آیا راه حلی وجود ندارد که بتوان این کار را انجام داد؟
البته براساس راهنمای شما میشه ابتدا عکس از دیتابیس خواند بعد داخل سیستم در یک مسیر پیش فرض ذخیره اش کرد بعد با استفاده از دستورات شما و بااستفاده از ان مسیر پیش فرض عکس را باز کرد
اما این سرعت برنامه را پایین میاورد
باید راه حلی وجود داشته باشد که بصورت مستقیم عکس نمایش داد؟

ژیار رحیمی
سه شنبه 04 مهر 1396, 14:13 عصر
از این متد جهت تبدیل آرایه ای از بایت ها به Image استفاده کن

public static Image ByteArrayToImage(byte[] byteArrayIn)
{
var ms = new MemoryStream(byteArrayIn);
var returnImage = Image.FromStream(ms);
return returnImage;
}

mohsennajafeihodk
سه شنبه 04 مهر 1396, 23:27 عصر
ممنون از پاسخ شما
یعنی در دستور
System.Diagnostics.Process.Start("مسیر عکس");
بجای مسیر عکس این متد فراخوانی کنم؟

ژیار رحیمی
چهارشنبه 05 مهر 1396, 00:49 صبح
اگر تمایل داری که Image Viewer ویندوز جهت نمایش تصویر استفاده کنی قبل از فراخوانی متد Process.Start تصویری که از آرایه بایت ها بدست اوردی در جایی ثابت کنار فایل اجرای بایک نام مشخص(تمام تصاویر با یک نام مشخص و Override شود) ذخیره کن سپس آدرس فایل ذخیره شده تصویر + نام آنرا بجای "مسیر عکس" بنویس
راه دیگر نمایش تصویر اینه که یک فرم اضافه کن و روی فرم یک PictureBox اضافه کن سپس براحتی تصویر خروجی که ازنوع Image هست رو پاس بده به فرم و در خاصیت PictureBox.Image مقدار دهی کن

رامین مرادی
چهارشنبه 05 مهر 1396, 08:18 صبح
ممنون از راهنمای شما
دستورات شما درست است
ولی هدف من نمایش عکسی هست که داخل دیتابیس بصورت بایت ذخیره شده و داخل سیستم ذخیره نشده که مسیر عکس وجود داشته باشد
آیا راه حلی وجود ندارد که بتوان این کار را انجام داد؟
البته براساس راهنمای شما میشه ابتدا عکس از دیتابیس خواند بعد داخل سیستم در یک مسیر پیش فرض ذخیره اش کرد بعد با استفاده از دستورات شما و بااستفاده از ان مسیر پیش فرض عکس را باز کرد
اما این سرعت برنامه را پایین میاورد
باید راه حلی وجود داشته باشد که بصورت مستقیم عکس نمایش داد؟

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