将位图保存到 MemoryStream
Saving Bitmap to MemoryStream
我正在尝试将位图保存到 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();
}
我希望得到一个准确的答案,可以指出主要错误以及我应该更改代码的哪些部分。
尽管任何帮助将不胜感激。
有趣;这里发生的是:
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);
并且正如评论中已经提到的那样,要获得其中的 base-64,您需要:
ping = Convert.ToBase64String(m.GetBuffer(), 0, (int)m.Length);
我正在尝试将位图保存到 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();
}
我希望得到一个准确的答案,可以指出主要错误以及我应该更改代码的哪些部分。 尽管任何帮助将不胜感激。
有趣;这里发生的是:
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);
并且正如评论中已经提到的那样,要获得其中的 base-64,您需要:
ping = Convert.ToBase64String(m.GetBuffer(), 0, (int)m.Length);