Windows Phone 解析图片尺寸之png
2012-03-21 23:53
246 查看
前面介绍过Windows Phone 解析图片格式,通过解析图片格式,我们可以根据图片格式使用相关控件展示。在Windows Phone开发中,无论是系统Image控件,还是ImageTools中提供的图片控件,加载图片都是异步过程,这样就使得我们无法立即获得图片的尺寸大小,而必须等图片加载完成后才能获得。然后在开发过程中,有时候我们需要在加载图片完成之前就获取图片的尺寸。同前面解析图片格式的处理方法类似,我们需要解析图片文件的头信息,并从中获取图片的宽度和高度信息。
要解析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
要解析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
//读取宽度,高度 各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); height_ = BitConverter.ToInt32(buffer, 4);
相关文章推荐
- Windows Phone 解析图片尺寸之bmp
- Windows Phone 解析图片尺寸之jpg
- Windows Phone 解析图片尺寸之gif
- Windows Phone 解析图片尺寸之bmp
- PNG图片尺寸小于2x2,导致小尺寸屏幕机型会缩放为0像素导致crash
- 一个取图片尺寸的类,支持jpg,gif,png
- photoshop 优化 PNG 图片尺寸大小 终极秘技!
- Windows Phone 解析图片格式
- Android Bitmap 全面解析(一)加载大尺寸图片
- Android Bitmap 全面解析(一) 加载大尺寸图片
- 使用 Libpng 配合 GDI 完成对 png 图片的解析与显示
- 解析 png 图片的十六进制字符流的函数 - 回复 "黑人" 的问题
- libpng解析png图片,用SDL显示
- Windows Phone 解析图片格式
- 使用 Libpng 配合 GDI 完成对 png 图片的解析与显示
- POI解析word试卷(解析表格,wmf转png图片)
- MFC利用GdipButton实现png按钮,并在此基础上实现图片适应按钮尺寸的缩放
- 通过压缩png图片的方式减少ipa包的尺寸
- Golang png Decode解析不了png图片
- ios开发学习- 简易音乐播放器2 (基于iPhone4s屏幕尺寸)-- 歌词解析--plist文件应用--imageNamed图片加载耗内存