protected override Bitmap OnGetBitmap(int imageIndex, int paletteIndex) { KsltImageData imageData = ImageData[imageIndex]; ImageBinary imageBinary = new ImageBinary(); imageBinary.Width = imageData.Width; imageBinary.Height = imageData.Height; imageBinary.InputEndianness = Endian.LittleEndian; switch (imageData.PixelFormat) { case KsltPixelFormat.Argb8888: imageBinary.InputPixelFormat = PixelDataFormat.FormatArgb8888; break; case KsltPixelFormat.DXT5: imageBinary.InputPixelFormat = PixelDataFormat.FormatDXT5; imageBinary.InputPixelFormat |= PixelDataFormat.PixelOrderingSwizzledVita; break; default: throw new NotImplementedException(string.Format("KSLT format 0x{0:X8}", (uint)imageData.PixelFormat)); } imageBinary.AddInputPixels(imageData.PixelData); return(imageBinary.GetBitmap()); }
protected override void OnOpen(EndianBinaryReader reader) { MagicNumber = Encoding.ASCII.GetString(reader.ReadBytes(8)); NumImages = reader.ReadUInt32(); FileSize = reader.ReadUInt32(); ImageNamesOffset = reader.ReadUInt32(); ImageNamesSize = reader.ReadUInt32(); Unknown0x18 = reader.ReadBytes(0x28); ImageNameLengths = new uint[NumImages]; ImageDataOffsets = new uint[NumImages]; for (int i = 0; i < NumImages; i++) { ImageNameLengths[i] = reader.ReadUInt32(); ImageDataOffsets[i] = reader.ReadUInt32(); } ImageNames = new string[NumImages]; reader.BaseStream.Seek(0x40 + ImageNamesOffset, SeekOrigin.Begin); for (int i = 0; i < NumImages; i++) { ImageNames[i] = Encoding.ASCII.GetString(reader.ReadBytes((int)ImageNameLengths[i] + 1)).TrimEnd('\0'); } ImageData = new KsltImageData[NumImages]; for (int i = 0; i < NumImages; i++) { reader.BaseStream.Seek(ImageDataOffsets[i], SeekOrigin.Begin); ImageData[i] = new KsltImageData(reader); } }