이 예제에서는 Lnk2Resource 및 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;// PSD 파일에 있는 스마트 오브젝트의 데이터를 파일로 저장합니다.voidSaveSmartObjectData(stringprefix,stringfileName,byte[]data){varfilePath=basePath+prefix+"_"+fileName;using(varcontainer=FileStreamContainer.CreateFileStream(filePath,false)){container.Write(data);}}// PSD 파일의 스마트 오브젝트에 대한 새 데이터를 로드합니다.byte[]LoadNewData(stringfileName){using(varcontainer=FileStreamContainer.OpenFileStream(basePath+fileName)){returncontainer.ToBytes();}}// PSD Lnk2 / Lnk3 리소스의 속성과 PSD 이미지의 liFD 데이터 소스를 가져오고 설정합니다.voidExampleOfLnk2ResourceSupport(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비트 저장은 아직 지원되지 않습니다.{image.Save(basePath+Output+fileName,newPsdOptions(image));}}}// 이 예제는 채널당 8비트에 대한 PSD Lnk2 리소스 및 해당 liFD 데이터 소스의 속성을 가져오고 설정하는 방법을 보여줍니다.ExampleOfLnk2ResourceSupport("rgb8_2x2_embedded_png.psd",1,0x12C,0x0000079c,Lnk2ResourceSupportCases);// 이 예제는 채널당 32비트에 대한 PSD Lnk3 리소스 및 해당 liFD 데이터 소스의 속성을 가져오고 설정하는 방법을 보여줍니다.ExampleOfLnk2ResourceSupport("Layered PSD file smart objects.psd",2,0x19504,0x0001d3e0,LayeredLnk3ResourceSupportCases);// 이 예제는 채널당 16비트에 대한 PSD Lnk2 리소스 및 해당 liFD 데이터 소스의 속성을 가져오고 설정하는 방법을 보여줍니다.ExampleOfLnk2ResourceSupport("LayeredSmartObjects16bit.psd",2,0x19504,0x0001d3e0,LayeredLnk2ResourceSupportCases);