WPF: ذخیره و فراخوانی تصاویر در دیتابیس (varbinary)

هادی علیزاده

عضویت : 1397/06/25 پرسش ها : 43 پاسخ ها : 39

WPF: ذخیره و فراخوانی تصاویر در دیتابیس (varbinary)

ارسال شده در : ‫۲ ماه قبل، پنج شنبه ۱۰ بهمن ۱۳۹۸، ساعت ۰۹:۲۹

استاد گرامی، آقای باقزراده ی عزیز؛

من در دیتا بیسی که دارم تصاویر رو به صورت (max)varbinary ذخیره کردم. الان می خوام از همون دیتا بیس استفاده کنم.

آیا امکان ذخیره سازی و فراخوانی تصاویر به همان صورت در WPF وجود داره؟

من از یک Converter استفاده کردم، ولی خطا میده!

public class ImageDataConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            MemoryStream ms = new MemoryStream(value as byte[]);
            Image image= Image.FromStream(ms);
            return image;
        }

        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            return null;
        }
    }

بعد در XAML

<Window.Resources>
        <converter:ImageDataConverter x:Key="imageConverter" />
    </Window.Resources>

 <Image Source="{Binding Path=AttachedFile, Converter={StaticResource imageConverter}}" />

میشه لطفا راهنمایی بفرمایید.

 

 

در غیر این صورت میشه روشی برای ذخیره سازی و بازخوانی عکس ها از SQL بفرمایید!

 

سپاس فراوان

سجاد باقرزاده

عضویت : 1396/09/12 پرسش ها : 0 پاسخ ها : 90
ارسال شده در :‫۲ ماه قبل، شنبه ۱۲ بهمن ۱۳۹۸، ساعت ۰۷:۳۱

سلام

1 - بازگشت متد Convert شما باید از نوع Image Source باشد.

2 - همیشه قبل از استفاده از value در Convert نوع داده ای آن را با is چک کنید.

3 - متد Convert خودتون رو خط به خط debug کنید تا ببینید که ورودی شما چیست و بتوانید خطاهای مربوط به Convertor را بر طرف کنید.

0 تشکر

هادی علیزاده

عضویت : 1397/06/25 پرسش ها : 43 پاسخ ها : 39
ارسال شده در :‫۲ ماه قبل، شنبه ۱۲ بهمن ۱۳۹۸، ساعت ۰۸:۲۰

سلام استاد باقرزاده ی عزیز؛

من متد Convert رو به صورت زیر تغییر دادم.

public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            if (value is byte[])
            {               
                byte[] image = value as byte[];
                MemoryStream ms = new MemoryStream(image);
                return Image.FromStream(ms);
            }

            return null;            
        }

این خطا رو برمیگردونه!

Parameter is not valid
This exception was originally thrown at this call stack:
    System.Drawing.Image.FromStream(System.IO.Stream, bool, bool)
    System.Drawing.Image.FromStream(System.IO.Stream)
    System.Windows.Data.BindingExpression.TransferValue(object, bool)
    System.Windows.Data.BindingExpression.Activate(object)
    System.Windows.Data.BindingExpression.AttachToContext(System.Windows.Data.BindingExpression.AttachAttempt)
    System.Windows.Data.BindingExpression.MS.Internal.Data.IDataBindEngineClient.AttachToContext(bool)
    MS.Internal.Data.DataBindEngine.Task.Run(bool)
    MS.Internal.Data.DataBindEngine.Run(object)
    MS.Internal.Data.DataBindEngine.OnLayoutUpdated(object, System.EventArgs)
    ...
    [Call Stack Truncated]

میشه لطفا راهنمایی بفرمایید.

0 تشکر

برای ارسال پاسخ باید وارد شوید و یا در سایت عضو شوید