2016-02-26 10 views
5

Korzystanie WIC jestem w stanie napisać XMP informacje o ludziach Tagged: People Tagging OverviewJak napisać XMP „Ludzie Tagged” w Uniwersalny Aplikacje [UWP]

Teraz staram się zrobić to samo w UWP ale nie jest działa:

Kiedy próbuję zmieniać tylko zwykły tag, taki jak "/ xmp/Title", działa.

Ale kiedy próbuję zmienić "PersonDisplayName" lub "Rectangle", to nie działa.

Przykładowy kod:

public async void SaveNewPeopleTagged(StorageFile file, string name , string rect) 
    { 
     try 
     { 
      using (IRandomAccessStream fileStream = await file.OpenAsync(FileAccessMode.ReadWrite), 
             memStream = new InMemoryRandomAccessStream()) 
      { 
       BitmapDecoder decoder = await BitmapDecoder.CreateAsync(fileStream); 

       // Set the encoder's destination to the temporary, in-memory stream. 
       BitmapEncoder encoder = await BitmapEncoder.CreateForTranscodingAsync(memStream, decoder); 

       var propertySet = new Windows.Graphics.Imaging.BitmapPropertySet(); 

       BitmapTypedValue btName = new BitmapTypedValue(name, Windows.Foundation.PropertyType.String); 
       //"/xmp/<xmpstruct>MP:RegionInfo/<xmpbag>MPRI:Regions/PersonDisplayName" **is not working** 
       propertySet.Add("/xmp/RegionInfo/Regions/PersonDisplayName", btName); 

       BitmapTypedValue btRect = new BitmapTypedValue(rect, Windows.Foundation.PropertyType.String); 
       //"/xmp/<xmpstruct>MP:RegionInfo/<xmpbag>MPRI:Regions/Rectangle" **is not working** 
       propertySet.Add("/xmp/RegionInfo/Regions/Rectangle", btRect); 

       await encoder.BitmapProperties.SetPropertiesAsync(propertySet); 
       //**Give a exception... "Value does not fall within the expected range."** 

       //If I use only : propertySet.Add("/xmp/Title", ...); it is working 

       await encoder.FlushAsync(); 
       await memStream.FlushAsync(); 
       memStream.Seek(0); 
       fileStream.Seek(0); 
       fileStream.Size = 0; 
       await RandomAccessStream.CopyAsync(memStream, fileStream); 

      } 
     } 
     catch (Exception err) 
     { 
      Debug.WriteLine(err.Message); 
     } 
    } 

Czy ktoś ma pomysły lub sugestie?

Dzięki

+0

widzę tylko, że czytasz plik (możliwe plik obrazu) z 'InstalledLocation' i włączyć go do strumienia, a następnie użyć dekoder i koder 'Bitmap' do zrobienia czegoś z tym strumieniem, a następnie przywrócić go jako plik, co chcesz zrobić z tym plikiem? –

+1

Próbuję wstawić metadane do bitmapy w UWP, jestem w stanie odczytać wszystkie metadane. Jestem w stanie zapisać wszystkie metadane w bitmapie, z wyjątkiem tagu osób. W C++/Desktop działa on przy użyciu WIC, ale w wersji UWP nie działa, – Cassius

+1

Próbowałem również do mojego obecnego projektu, aby oznaczyć ludzi tagami, ale to nie zadziałało. Czy ktoś znalazł rozwiązanie tego problemu? – ctron

Odpowiedz

3

To działa dla mnie:

int n = 0; // nth entry 
propertySet.Add("/xmp/<xmpstruct>MP:RegionInfo/<xmpbag>MPRI:Regions/<xmpstruct>{ulong=" + n + "}/MPReg:Rectangle", new BitmapTypedValue(rect, PropertyType.String)); 
propertySet.Add("/xmp/<xmpstruct>MP:RegionInfo/<xmpbag>MPRI:Regions/<xmpstruct>{ulong=" + n + "}/MPReg:PersonDisplayName", new BitmapTypedValue(name, PropertyType.String)); 
+0

Dziękuję bardzo, – Cassius