Skip to main content
 首页 » 编程设计

c#之BitmapImage:访问关闭的 StreamSource

2024年02月23日29rubylouvre

我正在使用以下代码尝试将我的 BitmapImage 转换为 byte[],这样我就可以将它保存在我的 MS SQL 数据库中。

    public static byte[] BufferFromImage(BitmapImage img) 
    { 
        if (img == null) 
            return null; 
 
            byte[] result = null; 
            using (Stream stream = img.StreamSource) 
            { 
                if (stream != null && stream.Length > 0) 
                { 
                    using (BinaryReader br = new BinaryReader(stream)) 
                    { 
                        result = br.ReadBytes((int)(stream.Length)); 
                    } 
                } 
            } 
 
            return result; 
        } 

遗憾的是这不起作用,因为当我尝试在 if 语句中访问它时 img.StreamSource 被释放,导致异常“无法访问已释放的文件”。

我的电话: BufferFromImage(imgLogo.Source as BitmapImage);

我怎样才能避免这种情况?

请您参考如下方法:

我终于设法让它工作了:

    public static byte[] BufferFromImage(BitmapImage img) 
    { 
        byte[] result = null; 
 
        if (img != null) 
        { 
            using(MemoryStream memStream = new MemoryStream()) 
            { 
                JpegBitmapEncoder encoder = new JpegBitmapEncoder(); 
                encoder.Frames.Add(BitmapFrame.Create(img)); 
                encoder.Save(memStream); 
 
                result = memStream.ToArray(); 
            } 
 
        } 
 
        return result; 
    }