繁体   English   中英

位图到Base64String

[英]Bitmap to Base64String

我正在尝试将位图转换为base64字符串。我可以将其从字符串转换为位图...但是当从位图转换为字符串时似乎出现了问题。我希望你们能帮帮我

    public static string BitmapToString(BitmapImage image)
    {

        Stream stream = image.StreamSource ;
        Byte[] buffer = null;
        if (stream != null && stream.Length > 0)
        {
            using (BinaryReader br = new BinaryReader(stream))
            {
                buffer = br.ReadBytes((Int32)stream.Length);
            }
        }

        return Convert.ToBase64String(buffer);
    }

它得到ArgumentNullException未处理值不能为null。 参数名称:返回Convert.ToBase64String(buffer)时的inArray

救命?

尝试以下替代方法:

 public string BitmapToBase64(BitmapImage bi)
        {
            MemoryStream ms = new MemoryStream();
            PngBitmapEncoder encoder = new PngBitmapEncoder();
            encoder.Frames.Add(BitmapFrame.Create(bi));
            encoder.Save(ms);
            byte[] bitmapdata = ms.ToArray();

            return Convert.ToBase64String(bitmapdata);
        }

在您的解决方案中,如果StreamSource是使用Uri加载的,则不必总是具有值。

首先,必须使用某些位图编码器(例如PngBitmapEncoder )将BitmapImage数据保存到内存中。

public static byte[] EncodeImage(BitmapImage bitmapImage)
{
    using (MemoryStream memoryStream = new MemoryStream())
    {
        BitmapEncoder encoder = new PngBitmapEncoder();
        encoder.Frames.Add(BitmapFrame.Create(bitmapImage));
        encoder.Save(memoryStream);
        return memoryStream.ToArray();
    }
}

然后只需使用Base64编码对二进制数据进行编码。

const string filePath = @"...";
const string outFilePath = @"...";
const string outBase64FilePath = @"...";

// Constuct test BitmapImage instance.
BitmapImage bitmapImage = new BitmapImage();
bitmapImage.BeginInit();
bitmapImage.StreamSource = File.OpenRead(filePath);
bitmapImage.CacheOption = BitmapCacheOption.OnLoad;
bitmapImage.EndInit();

// Convert BitmapImage to byte array.
byte[] imageData = EncodeImage(bitmapImage);
File.WriteAllBytes(outFilePath, imageData);

// Encode with Base64.
string base64String = Convert.ToBase64String(imageData);

// Write to file (for example).
File.WriteAllText(outBase64FilePath, base64String);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM