保存位图的MemoryStream

问题描述 投票:1回答:1

我想一个位图保存到MemoryStream,然后将其转换为字符串。但问题是,我有这行img.Save(m, img.RawFormat);不能null错误。 The error is this

位图是从指纹扫描,即我转换为图像。现在,我想它的数据转换为字符串,使用的MemoryStream。这是要保存在数据库中的指纹数据。我不知道我在哪里出了错。你可以找到我的代码如下:

        Bitmap bitmap;
        bitmap = ConvertSampleToBitmap(Sample);
        Bitmap img = new Bitmap(bitmap, fingerprint.Size);
        this.Invoke(new Function(delegate () {
            fingerprint.Image = img;   // fit the image into the picture box
        }));
        string ping;
        using (MemoryStream m = new MemoryStream())
        {
            img.Save(m, img.RawFormat);
            ping = m.ToString();
        }

我希望一个准确的答案,可以针点的重大错误,我应该改变了代码的部分。虽然任何帮助,将不胜感激。

c# bitmap memorystream
1个回答
1
投票

有趣;这里所发生的是:

public void Save(Stream stream, ImageFormat format)
{
    if (format == null)
    {
        throw new ArgumentNullException("format");
    }
    ImageCodecInfo encoder = format.FindEncoder();
    this.Save(stream, encoder, null);
}

与内Save做这个检查:

public void Save(Stream stream, ImageCodecInfo encoder, EncoderParameters encoderParams)
{
    if (stream == null)
    {
        throw new ArgumentNullException("stream");
    }
    if (encoder == null)
    {
        throw new ArgumentNullException("encoder");
    }

所以;我们可以假设,format.FindEncoder();这里返回null。碰巧,这确实是默认的,如果没有匹配的编解码器:

internal ImageCodecInfo FindEncoder()
{
    foreach (ImageCodecInfo info in ImageCodecInfo.GetImageEncoders())
    {
        if (info.FormatID.Equals(this.guid))
        {
            return info;
        }
    }
    return null;
}

所以基本上,目前尚不清楚,但问题是:有没有发现,你所使用的图像格式编码器。尝试保存为一个众所周知的格式,不一定是从加载的一个。也许使用ImageFormat.Png并将其保存为PNG?

img.Save(m, ImageFormat.Png);

并且在评论中已经提到,要获得基64的是,您需要:

ping = Convert.ToBase64String(m.GetBuffer(), 0, (int)m.Length);
© www.soinside.com 2019 - 2024. All rights reserved.