示例#1
0
        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);
        }
示例#2
0
        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);
        }
示例#3
0
 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);
 }
示例#4
0
        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());
        }