前面介绍了Windows Phone 解析图片尺寸之gif,之前也介绍了jpg和png图片的相关解析。Windows Phone系统支持的图片格式是jpg和png,所以bmp图片的现实同gif图片显示的处理方式类似,同样需要采用第三方类库ImageTools,其中ImageTools的获取在gif图片解析中已经介绍,下面代码给出创建一个显示bmp图片的控件。
//创建bmp控件
AnimatedImage bmpImage = new AnimatedImage();
Decoders.AddDecoder<BmpDecoder>();
//根据图片字节流加载图片
ExtendedImage extendedImg = new ExtendedImage();
BmpDecoder dc = new BmpDecoder();
dc.Decode(extendedImg, stream);
bmpImage.Source = extendedImg;
典型的位图文件格式通常包含下面几个数据块:
位图头:保存位图文件的总体信息。
位图信息:保存位图图像的详细信息。
调色板:保存所用颜色的定义。
位图数据:保存一个又一个像素的实际图像。
通过解析位图头我们可以判断图片是否为bmp格式,而我们所需要的图片尺寸信息存储在位图信息数据块里。所以我们需要详细了解位图头和位图信息两个数据块的存储结构。
http://zh.wikipedia.org/wiki/BMP。
通过上面对BMP图片格式的了解,可以用下面的代码来解析bmp图片的尺寸大小。
//Bmp 图片前2字节:0x42 4D
byte[] header = new byte[2];
stream.Read(header, 0, 2);
if ( !(header[0] == 0x42 && header[1] == 0x4D))
{
//不是BMP图片
return;
}
//跳过16个字节
stream.Seek(16, SeekOrigin.Current);
//bmp图片的宽度信息保存在第 18-21位 4字节
//bmp图片的高度度信息保存在第 22-25位 4字节
//读取宽度,高度 各4字节
byte[] buffer = new byte[8];
stream.Read(buffer, 0, buffer.Length);
width_ = BitConverter.ToInt32(buffer, 0);
height_ = BitConverter.ToInt32(buffer, 4);