2016-02-26 4 views
5

WIC का उपयोग करते हुए मेरे द्वारा टैग लोगों के बारे में जानकारी XMP लिखने में सक्षम हूँ: People Tagging Overviewकैसे लिखने के लिए XMP "लोग टैग की गईं" में यूनिवर्सल Apps [UWP]

अब मैं UWP में भी ऐसा ही करने की कोशिश कर रहा हूँ, लेकिन यह नहीं है काम कर रहा है:

जब मैं केवल "/ xmp/title" जैसे एक साधारण टैग को बदलने का प्रयास करता हूं तो यह काम कर रहा है।

लेकिन जब मैं "PersonDisplayName" या "आयताकार" को बदलने का प्रयास करता हूं, तो यह काम नहीं कर रहा है।

कोड नमूना:

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); 
     } 
    } 

किसी विचार या सुझाव हैं?

धन्यवाद

+0

मैं केवल अपने 'InstalledLocation' से देख सकते हैं कि जब आप किसी फ़ाइल (संभव एक छवि फ़ाइल) पढ़ सकते हैं और इसे चालू स्ट्रीम करने के लिए तो आप का उपयोग इस धारा के साथ कुछ करने के लिए 'बिटमैप' के डिकोडर और एन्कोडर को फिर फ़ाइल के रूप में पुनर्स्थापित करें, आप इस फ़ाइल के साथ क्या करना चाहते हैं? –

+1

मैं यूडब्ल्यूपी में बिटमैप में मेटाडेटा डालने की कोशिश कर रहा हूं, मैं सभी मेटाडेटा पढ़ने में सक्षम हूं। मैं लोग टैग को छोड़कर, बिटमैप में सभी मेटाडेटा लिखने में सक्षम हूं। सी ++/डेस्कटॉप एप्लिकेशन में यह डब्ल्यूआईसी का उपयोग कर काम कर रहा है लेकिन यूडब्ल्यूपी में यह काम नहीं कर रहा है, – Cassius

+1

मैंने लोगों को टैग करने के लिए अपने वर्तमान प्रोजेक्ट की भी कोशिश की लेकिन यह काम नहीं किया। क्या किसी के लिए इसका समाधान मिला है? – ctron

उत्तर

3

यह मेरे लिए काम कर रहा है:

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

आपको बहुत बहुत धन्यवाद, – Cassius

संबंधित मुद्दे