在C#(.NET FW 4.5)中,有没有办法了解bytestring是否包含.svg文件或任何光栅文件?我用这个例程:
[...]
byte[] img = System.Convert.FromBase64String(res);
ctrlImage = new BitmapImage();
ctrlImage.BeginInit();
MemoryStream ms = new MemoryStream(img);
ctrlImage.StreamSource = ms;
ctrlImage.EndInit();
将流转换为BitmpatImage
,但现在我需要验证res
是否包含svg文件而不是光栅文件。
谢谢。
答案 0 :(得分:3)
SVG文件格式基于XML。因此,您可以尝试解码图像缓冲区中的文本字符串,并检查它是以<?xml
还是<svg
开头:
bool isSvg = false;
try
{
var text = Encoding.UTF8.GetString(img);
isSvg = text.StartsWith("<?xml ") || text.StartsWith("<svg ");
}
catch
{
}
或者您可能只是检查缓冲区中的第一个字节是否为<
,因为栅格图像格式不是以该字符开头的:
bool isSvg = img[0] == '<';
答案 1 :(得分:0)
成功创建解码器后,您可以使用BitmapDecoder
类并阅读CodecInfo
。
样品
FileStream stream = new FileStream(imagePath, FileMode.Open);
BitmapDecoder decoder = BitmapDecoder.Create(stream, BitmapCreateOptions.None, BitmapCacheOption.None);
// decoder.CodecInfo contains the information about the image type
stream.Close();
你的案子
byte[] img = System.Convert.FromBase64String(res);
MemoryStream ms = new MemoryStream(img);
BitmapDecoder decoder = BitmapDecoder.Create(ms, BitmapCreateOptions.None, BitmapCacheOption.None);
// decoder.CodecInfo contains the information about the image type
stream.Close();