private void SaveFui(string filepath) { List <byte> fuiBytes = new List <byte>(); List <byte> imageSection = new List <byte>(); int currentOffset = 0; fuiBytes.AddRange(fuiMainBytes); for (int i = 0; i < fuiImageInfo.Count; i++) { FuiImageInfo imageInfo = fuiImageInfo[i]; using (MemoryStream imageStream = new MemoryStream(originalImagesData[i], false)) { Image imageSave = Image.FromStream(imageStream); byte[] imageBytes = originalImagesData[i]; imageInfo.Width = imageSave.Width; imageInfo.Height = imageSave.Height; imageInfo.ImageOffset = currentOffset; imageInfo.ImageSize = imageBytes.Length; fuiBytes.AddRange(imageInfo.ToByteArray()); imageSection.AddRange(imageBytes); currentOffset += imageBytes.Length; imageSave.Dispose(); } } fuiBytes.AddRange(imageSection); File.WriteAllBytes(filepath, FuiUtils.ProcessHeader(fuiBytes.ToArray())); OnSavedFui(filepath); }
private void OpenFui(string filepath) { OnOpenFui(); byte[] filedata = File.ReadAllBytes(filepath); int pngIndex = ArrayUtils.SearchBytes(filedata, 0, PngStartPattern); if (pngIndex < 0) { MessageBox.Show(Resources.DialogFailedToOpen, Resources.DialogError); return; } FuiImageInfo[] imageInfo = FuiUtils.GetImageInfo(filedata, pngIndex); List <byte[]> imagesData = FuiUtils.GetImagesData(filedata, pngIndex, imageInfo); originalImagesData.AddRange(imagesData); for (int i = 0; i < imagesData.Count; i++) { byte[] imageData = imagesData[i]; using (MemoryStream stream = new MemoryStream(imageData, false)) { Image image = Image.FromStream(stream); originalImageFormats.Add(image.RawFormat); imageList.Images.Add(ImageUtils.CreateThumbnail(image, imageList.ImageSize)); imageListView.Items.Add($"{image.Width}x{image.Height}", i); image.Dispose(); } } fuiMainBytes = filedata.Take(pngIndex - imageInfo.Length * FuiImageInfo.NativeSize).ToArray(); fuiImageInfo.AddRange(imageInfo); OnOpendFui(filepath); }
public void Read(byte[] filedata, int startIndex) { descriptor = FuiUtils.ToInt32(filedata, startIndex + 0); attribute = FuiUtils.ToInt32(filedata, startIndex + 4); imageWidth = FuiUtils.ToInt32(filedata, startIndex + 8); imageHeight = FuiUtils.ToInt32(filedata, startIndex + 12); imageOffset = FuiUtils.ToInt32(filedata, startIndex + 16); imageSize = FuiUtils.ToInt32(filedata, startIndex + 20); unkOffset = FuiUtils.ToInt32(filedata, startIndex + 24); unk_0x1C = FuiUtils.ToInt32(filedata, startIndex + 28); }
public byte[] ToByteArray() { List <byte> byteList = new List <byte>(); byteList.AddRange(FuiUtils.GetBytes(descriptor)); byteList.AddRange(FuiUtils.GetBytes(attribute)); byteList.AddRange(FuiUtils.GetBytes(imageWidth)); byteList.AddRange(FuiUtils.GetBytes(imageHeight)); byteList.AddRange(FuiUtils.GetBytes(imageOffset)); byteList.AddRange(FuiUtils.GetBytes(ImageSize)); byteList.AddRange(FuiUtils.GetBytes(unkOffset)); byteList.AddRange(FuiUtils.GetBytes(unk_0x1C)); return(byteList.ToArray()); }