Windows Phone 7解析圖片格式
在Windows Phone中用於顯示圖片的是Image控制元件,不過Image控制元件目前只支援兩種格式的圖片,即Png和Jpg。平時我們經常用的圖片還有Gif和Bmp兩種,對於這兩種圖片我們無法通過Image來顯示。需要用第三方開發的控制元件來顯示,ImageTools是開源社群CodePlex提供的,可以通過http://imagetools.codeplex.com/下載DLL以及原始碼,通過ImageTools我們可以顯示Gif和Bmp圖片。
因此對於比較常用的圖片格式Png、Jpg、Gif、Bmp,我們需要針對不同的圖片格式使用不同的控制元件來顯示,這裡就有一個來解析圖片格式的問題。我們不能單純的用檔案字尾名.png、.jpg、.jpeg、.gif、.bmp來區分圖片格式,因為實際上我們可以直接修改圖片字尾名,修改字尾名並不能修改圖片的格式,圖片還是保持它原來的格式。
圖片檔案的格式結果中,在頭部資訊(一般都會在圖片檔案最開始的幾個位元組)中都會包含圖片的格式資訊。下面就列車常用的這幾種格式圖片的頭部資訊標識(十六進位制)。
1.Png圖片檔案包括8位元組:89 50 4E 47 0D 0A 1A 0A。即為 .PNG....。
2.Jpg圖片檔案包括2位元組:FF D8。
3.Gif圖片檔案包括6位元組:47 49 46 38 39|37 61 。即為 GIF89(7)a。
4.Bmp圖片檔案包括2位元組:42 4D。即為 BM。
根據圖片問題頭標識資訊我們可以能很方便的判斷出檔案的格式,首先我們需要獲取圖片檔案的位元組流資訊,程式碼如下。
//獲取圖片檔案流,根據圖片是資原始檔或者獨立儲存檔案分別處理
Stream stream = null;
//如果是資原始檔處理
StreamResourceInfo info = Application.GetResourceStream(new Uri(path, UriKind.Relative));
if (info != null)
{
stream = info.Stream;
}
//如果是獨立儲存檔案處理
using (IsolatedStorageFile myIsolatedStorage = IsolatedStorageFile.GetUserStoreForApplication())
{
//開啟檔案
stream = myIsolatedStorage.OpenFile(path, FileMode.Open, FileAccess.Read);
}
從圖片檔案流stream中讀取8個位元組,然後再根據不同的圖片格式做檔案頭匹配比較具能判斷出檔案的格式,程式碼如下。
/// <summary>
/// 定義圖片格式
/// </summary>
public enum ImageType
{
Null,
Png,
Jpg,
Gif,
Bmp
}
/// <summary>
/// 獲取圖片格式
/// </summary>
private ImageType getImageType(Stream stream)
{
//圖片格式
ImageType type = ImageType.Null;
//讀取圖片檔案頭8個位元組,並根據若干個位元組來確定圖片格式
byte[] header = new byte[8];
stream.Read(header, 0, 8);
//確定圖片格式
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圖片 8位元組:89 50 4E 47 0D 0A 1A 0A
type = ImageType.Png;
}
else if (header[0] == 0xFF &&
header[1] == 0xD8)
{
//Jpg圖片 2位元組:FF D8
type = ImageType.Jpg;
}
else if (header[0] == 0x47 && // G
header[1] == 0x49 && // I
header[2] == 0x46 && // F
header[3] == 0x38 && // 8
(header[4] == 0x39 || // 9
header[4] == 0x37) && // 7
header[5] == 0x61) // a
{
//Gif圖片 6位元組:47 49 46 38 39|37 61
type = ImageType.Gif;
}
else if (header[0] == 0x42 && //B
header[1] == 0x4D) //M
{
//Bmp圖片 2位元組:42 4D
type = ImageType.Bmp;
}
//關閉位元組流
stream.Close();
return type;
}
解析到圖片格式後,我們就可以根據圖片格式選擇對應的控制元件來顯示圖片了。
本文來自宇之樂的部落格,原文地址:http://www.cnblogs.com/huizhang212/archive/2012/03/16/ImageType.html
相關文章
- Windows中如何檢視heic格式圖片Windows
- 圖片格式-AVIF
- 常用圖片格式
- Windows10系統不能複製圖片格式如何解決Windows
- 怎麼轉換圖片格式並壓縮圖片
- 圖片格式轉換,JPG圖片轉換成PDF
- Windows設定圖片縮圖Windows
- Windows10系統如何提高動漫圖片解析度Windows
- win10怎麼改圖片格式 win10系統如何更改圖片格式Win10
- Windows Phone SDK 8/8.1 官方下載Windows
- win7系統下word中如何批次匯出png格式圖片Win7
- win7系統下word中如何批量匯出png格式圖片Win7
- iOS開發圖片格式選擇iOS
- iOS 常用圖片格式判斷 (Swift)iOSSwift
- 圖片解析度修改
- 怎麼將bmp格式圖片轉換jpg格式的
- 開源圖片工具箱(Img Toolbox) 格式轉換 新增水印 圖片壓縮 圖片裁剪 圖片旋轉 圖片縮放
- 用SVG的圖片格式如何劃入更改圖片的顏色?SVG
- WidsMob ImageConvert for Mac 圖片格式轉換器Mac
- 教程:怎麼轉換heic格式圖片
- 圖片格式及空間的介紹
- heic圖片轉換格式怎麼轉?
- [譯] 你用對圖片格式了嗎?
- 常見圖片格式:PNG,JPG/JPEG,BMP
- flutter圖片元件原始碼解析Flutter元件原始碼
- Windows Phone應用效能監控與分析技巧Windows
- python 下,如何快速批次的把 numpy.ndarray 格式的圖片轉成 PIL 庫的 Image 格式的圖片Python
- 你有使用過webp的圖片格式嗎?Web
- 如何將heic格式轉換成jpg圖片?
- linux系統lcd顯示jpg格式圖片Linux
- [譯] 瞭解 Android 的向量圖片格式:`VectorDrawable`Android
- [譯] 瞭解 Android 的向量圖片格式:VectorDrawableAndroid
- 電腦上如何開啟heic格式圖片
- C++圖片格式轉換:BMP轉JPEGC++
- Flutter圖片解析度適配Flutter
- 幻燈片放映模式切換windows terminal背景圖片模式Windows
- element上傳圖片元件使用方法|圖片回顯|格式轉換base64元件
- dcat-admin上傳圖片 會自動把圖片壓成2:1的格式?
- win10怎麼看圖片解析度 win10圖片解析度如何檢視Win10