Windows Phone 解析图片尺寸之png
前面介绍过windows phone 解析图片格式
要解析png图片的宽度和高度信息,首先需要了解png图片的数据块结构,png图片的尺寸信息存放在文件头数据块中,所以我们需要了解文件头的数据块结构。
文件头数据块ihdr(header chunk):它包含有png文件中存储的图像数据的基本信息,并要作为第一个数据块出现在png数据流中,而且一个png数据流中只能有一个文件头数据块。 文件头数据块由13字节组成,其中前8个字节即为图片的宽度和高度信息,各占4个字节。
文件头数据块是第一个数据块,但是在数据块前,也就是png图片文件的最开始位置首先存储的是png文件署名域,占8个字节,即:89 50 4e 47 0d 0a 1a 0a ( .png....),通过这个可以判断图片是否为png格式,接下来是文件头数据块的长度和标识,各占4个字节,文件头数据块的长度为13,所以文件头数据块的长度固定为 00 00 00 0d,而文件头数据块的标识为49 48 44 52,即“ihdr”。
通过上面的解析,我们可以分一下几步来解析png图片的宽度和高度。
1.首先读取起始位的8个字节,即png文件署名域,判断图片是否为png格式,如果不是,则退出。
view code
//读取图片文件头8个字节,并根据这8个字节来判断是否为png图片
byte[] header = new byte[8];
stream.read(header, 0, 8);
//png图片 8字节:89 50 4e 47 0d 0a 1a 0a
if (!(header[0] == 0x89 &&
header[1] == 0x50 && // p
header[2] == 0x4e && // n
header[3] == 0x47 && // g
header[4] == 0x0d &&
header[5] == 0x0a &&
header[6] == 0x1a &&
header[7] == 0x0a))
{
//不是png图片
return;
}
2.然后跳过8个字节,即文件头数据块的长度值 00 00 00 0d,以及文件头数据块标识 49 48 44 52(ihdr)。
view code
//数据域长度 4 指定数据域的长度,固定为00 00 00 0d
//数据块符号 4 49 48 44 52,是“ihdr”的 ascii 码
stream.seek(8, seekorigin.current);
3.接下来要读取就是图片的宽度和高度值,读取8个字节,由于是按照高低位调换存储,所以需要做高低位转换,转换后通过bitconverter类直接将字节类型转换为整数型即为图片的尺寸。
view code
//读取宽度,高度 各4字节
byte[] buffer = new byte[8];
stream.read(buffer, 0, buffer.length);
array.reverse(buffer, 0, 4);
array.reverse(buffer, 4, 4);
width_ = bitconverter.toint32(buffer, 0);
上一篇: 五花肉怎样做好吃,这样做出新花样
下一篇: 奶粉品牌知多少 宝妈妈还不快快收藏
推荐阅读
-
Windows Phone开发之xaml传值交互与控件hyperlinkButton的使用
-
Windows Phone开发之String与StringBuilder
-
windows phone开发之获取屏幕分辨率 和 系统版本
-
Windows phone开发之支持的通信方式
-
windows phone开发之 listbox分页加载数据
-
Windows Phone 播放音频之MediaPlayer
-
Windows Phone 解析图片尺寸之png
-
Windows Phone开发之图片控件Image及定义URI
-
windows phone开发之客户端本地简单填充加密解密
-
windows phone开发之Image控件