Defines the class which contains information about an embedded file in the PSD format 32 bit per channel image. The link resource may contain several LiFdDataSource instances which can be accessed by indexer.
This example demonstrates how to get and set properties of the Lnk2Resource and Lnk3Resource.
[C#]voidAssertAreEqual(objectexpected,objectactual){if(!object.Equals(actual,expected)){thrownewFormatException(string.Format("Actual value {0} are not equal to expected {1}.",actual,expected));}}object[]Lnk2ResourceSupportCases=newobject[]{newobject[]{"00af34a0-a90b-674d-a821-73ee508c5479","rgb8_2x2.png","png",string.Empty,0x53,0d,string.Empty,7,true,0x124L,0x74cL}};object[]LayeredLnk2ResourceSupportCases=newobject[]{newobject[]{"69ac1c0d-1b74-fd49-9c7e-34a7aa6299ef","huset.jpg","JPEG",string.Empty,0x9d46,0d,"xmp.did:0F94B342065B11E395B1FD506DED6B07",7,true,0x9E60L,0xc60cL},newobject[]{"5a7d1965-0eae-b24e-a82f-98c7646424c2","panama-papers.jpg","JPEG",string.Empty,0xF56B,0d,"xmp.did:BDE940CBF51B11E59D759CDA690663E3",7,true,0xF694L,0x10dd4L},};object[]LayeredLnk3ResourceSupportCases=newobject[]{newobject[]{"2fd7ba52-0221-de4c-bdc4-1210580c6caa","panama-papers.jpg","JPEG",string.Empty,0xF56B,0d,"xmp.did:BDE940CBF51B11E59D759CDA690663E3",7,true,0xF694l,0x10dd4L},newobject[]{"372d52eb-5825-8743-81a7-b6f32d51323d","huset.jpg","JPEG",string.Empty,0x9d46,0d,"xmp.did:0F94B342065B11E395B1FD506DED6B07",7,true,0x9E60L,0xc60cL},};varbasePath=""+Path.DirectorySeparatorChar;stringOutput="output"+Path.DirectorySeparatorChar;// Saves the data of a smart object in PSD file to a file.voidSaveSmartObjectData(stringprefix,stringfileName,byte[]data){varfilePath=basePath+prefix+"_"+fileName;using(varcontainer=FileStreamContainer.CreateFileStream(filePath,false)){container.Write(data);}}// Loads the new data for a smart object in PSD file.byte[]LoadNewData(stringfileName){using(varcontainer=FileStreamContainer.OpenFileStream(basePath+fileName)){returncontainer.ToBytes();}}// Gets and sets properties of the PSD Lnk2 / Lnk3 Resource and its liFD data sources in PSD imagevoidExampleOfLnk2ResourceSupport(stringfileName,intdataSourceCount,intlength,intnewLength,object[]dataSourceExpectedValues){using(PsdImageimage=(PsdImage)Image.Load(basePath+fileName)){Lnk2Resourcelnk2Resource=null;foreach(varresourceinimage.GlobalLayerResources){lnk2Resource=resourceasLnk2Resource;if(lnk2Resource!=null){AssertAreEqual(lnk2Resource.DataSourceCount,dataSourceCount);AssertAreEqual(lnk2Resource.Length,length);AssertAreEqual(lnk2Resource.IsEmpty,false);for(inti=0;i<lnk2Resource.DataSourceCount;i++){LiFdDataSourcelifdSource=lnk2Resource[i];object[]expected=(object[])dataSourceExpectedValues[i];AssertAreEqual(LinkDataSourceType.liFD,lifdSource.Type);AssertAreEqual(newGuid((string)expected[0]),lifdSource.UniqueId);AssertAreEqual(expected[1],lifdSource.OriginalFileName);AssertAreEqual(expected[2],lifdSource.FileType.TrimEnd(' '));AssertAreEqual(expected[3],lifdSource.FileCreator.TrimEnd(' '));AssertAreEqual(expected[4],lifdSource.Data.Length);AssertAreEqual(expected[5],lifdSource.AssetModTime);AssertAreEqual(expected[6],lifdSource.ChildDocId);AssertAreEqual(expected[7],lifdSource.Version);AssertAreEqual((bool)expected[8],lifdSource.HasFileOpenDescriptor);AssertAreEqual(expected[9],lifdSource.Length);if(lifdSource.HasFileOpenDescriptor){AssertAreEqual(-1,lifdSource.CompId);AssertAreEqual(-1,lifdSource.OriginalCompId);lifdSource.CompId=int.MaxValue;}SaveSmartObjectData(Output+fileName,lifdSource.OriginalFileName,lifdSource.Data);lifdSource.Data=LoadNewData("new_"+lifdSource.OriginalFileName);AssertAreEqual(expected[10],lifdSource.Length);lifdSource.ChildDocId=Guid.NewGuid().ToString();lifdSource.AssetModTime=double.MaxValue;lifdSource.FileType="test";lifdSource.FileCreator="me";}AssertAreEqual(newLength,lnk2Resource.Length);break;}}AssertAreEqual(true,lnk2Resource!=null);if(image.BitsPerChannel<32)// 32 bit per channel saving is not supported yet{image.Save(basePath+Output+fileName,newPsdOptions(image));}}}// This example demonstrates how to get and set properties of the PSD Lnk2 Resource and its liFD data sources for 8 bit per channel.ExampleOfLnk2ResourceSupport("rgb8_2x2_embedded_png.psd",1,0x12C,0x0000079c,Lnk2ResourceSupportCases);// This example demonstrates how to get and set properties of the PSD Lnk3 Resource and its liFD data sources for 32 bit per channel.ExampleOfLnk2ResourceSupport("Layered PSD file smart objects.psd",2,0x19504,0x0001d3e0,LayeredLnk3ResourceSupportCases);// This example demonstrates how to get and set properties of the PSD Lnk2 Resource and its liFD data sources for 16 bit per channel.ExampleOfLnk2ResourceSupport("LayeredSmartObjects16bit.psd",2,0x19504,0x0001d3e0,LayeredLnk2ResourceSupportCases);