public void Convert(PSB psb) { if (!FromSpec.Contains(psb.Platform)) { throw new FormatException("Can not convert Spec for this PSB"); } if (ConvertOption == SpecConvertOption.Minimum) { Remove(psb); } var iconInfo = TranslateResources(psb); Travel((PsbDictionary)psb.Objects["object"], iconInfo); Add(psb); psb.Platform = ToWin ? PsbSpec.win : PsbSpec.common; }
public void Convert(PSB psb) { if (!FromSpec.Contains(psb.Platform)) { throw new FormatException("Can not convert Spec for this PSB"); } var asSpec = EmsAsCommon ? PsbSpec.ems : PsbSpec.common; var toSpec = psb.Platform == PsbSpec.win ? asSpec : PsbSpec.win; var toPixelFormat = toSpec == asSpec ? PsbPixelFormat.CommonRGBA8 : PsbPixelFormat.WinRGBA8; var resList = psb.CollectResources <ImageMetadata>(false); foreach (var resMd in resList) { var resourceData = resMd.Resource.Data; if (resourceData == null) { continue; } if (resMd.Compress == PsbCompressType.RL) { resourceData = RL.Decompress(resourceData); } if (resMd.PixelFormat == PsbPixelFormat.DXT5) { resourceData = RL.GetPixelBytesFromImage( DxtUtil.Dxt5Decode(resourceData, resMd.Width, resMd.Height), toPixelFormat); resMd.TypeString.Value = toPixelFormat.ToStringForPsb(); } else { RL.Switch_0_2(ref resourceData); if (UseRL) { resourceData = RL.Compress(resourceData); } } resMd.Resource.Data = resourceData; } psb.Platform = toSpec; }