我想從jpg圖像中提取exif數據。 ExifLib似乎是一個很好的選擇來簡化這件事,所以我通過NuGet安裝它。ExifLib是否可用於WPF/XAML應用程序?
我又試圖使用示例代碼here上手(註釋掉的消息框代碼現在):
using (ExifReader reader = new ExifReader(@"C:\temp\testImage.jpg"))
{
// Extract the tag data using the ExifTags enumeration
DateTime datePictureTaken;
if (reader.GetTagValue<DateTime>(ExifTags.DateTimeDigitized, out datePictureTaken))
{
// Do whatever is required with the extracted information
//System.Windows.MessageBox.Show(this, string.Format("The picture was taken on {0}",
// datePictureTaken), "Image information"); //, MessageBoxButtons.OK);
}
}
卻得到一個錯誤:
The best overloaded method match for 'ExifLib.ExifReader.ExifReader(System.IO.Stream)' has some invalid arguments
和
Argument 1: cannot convert from 'string' to 'System.IO.Stream'
both this line:
using (ExifReader reader = new ExifReader(@"C:\temp\testImage.jpg"))
這是可修復的問題,還是ExifLib無法從WPF/XAML應用程序中使用?
如果ExifLib是而不是對於WPF/XAML應用程序可行的解決方案,還有什麼替代方案?
更新:
有了這個代碼,由西蒙麥肯齊的回答是:
private void btnLoadNewPhotoset_Click(object sender, RoutedEventArgs e)
{
using (var store = IsolatedStorageFile.GetUserStoreForApplication())
using (var stream = store.OpenFile("testImage.jpg", FileMode.Open))
using (var reader = new ExifReader(stream))
{
// ...
}
}
我仍然得到一個錯誤:
The type or namespace name 'IsolatedStorage' does not exist in the namespace 'System.IO' (are you missing an assembly reference?)
這是一個Windows應用商店(C#)應用在Visual Studio 2013中創建。該項目的屬性顯示它的目標是Windows 8.1,配置管理器顯示配置== debug,platfor M = 64)
我的項目顯示的參考文獻有:
.NET for Windows Store apps
Bing.Maps.Xaml
ExifLib
Microsoft Visual C++ Runtime Package
Windows 8.1
我缺少什麼?
更新2:
當我在參考經理看Assemblies.Framework,它說,「所有的框架組裝的已經提到......」我想mscorlib.dll中應該是一個這些(它不列出它們)?
我搜索了我的硬盤驅動器「mscorlib.dll」,我有一百萬個,所有不同的大小和日期。我應該嘗試添加哪一個作爲參考?我已經將C:\ Program Files(x86)\ Reference Assemblies \ Microsoft \ Framework.NETFramework \ v4.5中的一個從7/9/2012(文件大小爲2,564,528)轉換爲C:\ Program Files(x86 )\ Reference Assemblies \ Microsoft \ Framework.NETCore \ v4.5.1 ...來命名它。
思考「C:\ Program Files文件(x86)\參考大會\微軟\ Framework.NETCore \ v4.5.1」似乎是最好的選擇,我試圖通過瀏覽按鈕引用它,但是當我做到了,有罵:
在充分披露的利益,在參考經理爲Windows 8.1,它說,「在Windows 8.1 SDK已經被引用。「
對於Windows 8.1.Extensions,它讓我看到:
Microsoft Visual C++ 2013 Runtime Package for Windows 12.0 (unchecked)
Microsoft Visual C++ 2013 Runtime Package 11.0 (checked)
由於這似乎是警告的人的事業,我扭轉了他們的checkedness(選中2013年, 不加以制止,其他)
。我還檢查:
Behaviors SDK (XAML) 12.0
SQLite for Windows Runtime 3.8.6 (because I will eventually be using SQLite in this project)
更新3:
我剛剛發現:「獨立存儲不適用於Windows應用商店應用程序。而應使用Windows Runtime API中包含的Windows.Storage命名空間中的應用程序數據類來存儲本地數據和文件。 。「here
更新4:
我等待着西蒙的例子,但我想這可能是這樣的:
using Windows.Storage;
using ExifLib;
. . .
private async void btnOpenImgFiles_Click(object sender, RoutedEventArgs e)
{
FileOpenPicker openPicker = new FileOpenPicker();
openPicker.ViewMode = PickerViewMode.Thumbnail;
openPicker.SuggestedStartLocation = PickerLocationId.PicturesLibrary;
openPicker.FileTypeFilter.Add(".jpg");
openPicker.FileTypeFilter.Add(".jpeg");
openPicker.FileTypeFilter.Add(".png");
IReadOnlyList<StorageFile> files = await openPicker.PickMultipleFilesAsync();
for (int i = 0; i < files.Count; i++)
{
using (var randomAccessStream = await files[i].OpenAsync(FileAccessMode.Read))
using (var stream = randomAccessStream.AsStream())
using (var exfrdr = new ExifReader(stream))
{
// ...exfrdr
}
}
}
這是一個Windows應用程序商店嗎? Windows商店應用程序無法直接訪問文件系統。因此,ExifReader在Windows Store應用程序中不提供字符串構造函數。您必須提供流,例如IsolatedStorageFileStream。 – 2014-10-11 03:40:31
好吧,我試圖找到一個例子...試圖使用它,我得到,「無法找到類型或名稱空間名稱IsolatedStorageFile'(你是否缺少using指令或程序集引用?) 「 - 似乎不可解決。 – 2014-10-11 04:19:26
它告訴你添加一個「使用」語句,即'使用System.IO.IsolatedStorage'。 – 2014-10-11 08:13:29