private void chk_8bpp_CheckedChanged(object sender, EventArgs e)
        {
            AbstractImage im = GetImageFromComboBoxItem();

            if (im.CanSelectPalette())
            {
                ((ISelectablePalette4bppImage)im).ImportExport8bpp = chk_8bpp.Checked;

                if (chk_8bpp.Checked)
                {
                    im.CurrentPalette = Math.Max(0, im.CurrentPalette - 15);
                    int upperIndexBound = Math.Max(1, im.PaletteCount - 15);

                    ddl_Palette.Items.Clear();
                    for (int index = 0; index < upperIndexBound; index++)
                    {
                        ddl_Palette.Items.Add(index);
                    }
                    ddl_Palette.SelectedIndex = im.CurrentPalette;

                    RefreshPictureBox(true);
                }
                else
                {
                    SetupPaletteDropdown();
                }
            }
        }
예제 #2
0
        public static List <AbstractImage> GetPSXEffectImages(Stream iso)
        {
            List <AbstractImage> images = new List <AbstractImage>();

            const int effectCount = 512;

            byte[]         effectFileBytes     = PatcherLib.Iso.PsxIso.ReadFile(iso, PatcherLib.Iso.PsxIso.Sectors.BATTLE_BIN, 0x14E3E8, effectCount * 8);
            byte[]         headerLocationBytes = PatcherLib.Iso.PsxIso.ReadFile(iso, PatcherLib.Iso.PsxIso.Sectors.BATTLE_BIN, 0x14D8D0, effectCount * 4);
            IList <string> effectNames         = PatcherLib.PSXResources.Lists.AbilityEffects;

            for (int effectIndex = 0; effectIndex < effectCount; effectIndex++)
            {
                int effectByteCount = effectFileBytes.SubLength((effectIndex * 8) + 4, 4).ToIntLE();
                if (effectByteCount == 0)
                {
                    continue;
                }

                uint headerLocation = headerLocationBytes.SubLength((effectIndex * 4), 4).ToUInt32();
                int  headerOffset   = (int)(headerLocation - 0x801C2500U);

                try
                {
                    AbstractImage image = GetPSXEffectImage(iso, effectIndex, effectNames[effectIndex], headerOffset);
                    if (image != null)
                    {
                        images.Add(image);
                    }
                }
                catch (Exception) { }
            }

            return(images);
        }
        private void ddl_Palette_SelectedIndexChanged(object sender, EventArgs e)
        {
            AbstractImage im = GetImageFromComboBoxItem();

            im.CurrentPalette = ddl_Palette.SelectedIndex;
            RefreshPictureBox(true);
        }
예제 #4
0
        public static List <AbstractImage> GetPSPEffectImages(Stream iso)
        {
            List <AbstractImage> images = new List <AbstractImage>();

            const int      effectCount = 512;
            IList <string> effectNames = PatcherLib.PSPResources.Lists.AbilityEffects;

            PatcherLib.Iso.PspIso.PspIsoInfo pspIsoInfo = PatcherLib.Iso.PspIso.PspIsoInfo.GetPspIsoInfo(iso);
            //byte[] subroutineEndByteSequence = new byte[8] { 0x08, 0x00, 0xE0, 0x03, 0x00, 0x00, 0x00, 0x00 };
            //byte[] frameDataOffsetByteSequence = new byte[4] { 0x28, 0x00, 0x00, 0x00 };

            for (int effectIndex = 0; effectIndex < effectCount; effectIndex++)
            {
                try
                {
                    AbstractImage effectImage = GetPSPEffectImage(iso, effectIndex, effectNames[effectIndex], pspIsoInfo);
                    if (effectImage != null)
                    {
                        images.Add(effectImage);
                    }
                }
                catch (Exception) { }
            }

            return(images);
        }
예제 #5
0
        private void RefreshPictureBox(bool forceReload = false)
        {
            AbstractImage im = GetImageFromComboBoxItem();

            AssignNewPictureBoxImage(im.GetImageFromIso(iso, forceReload));
            imageSizeLabel.Text = string.Format("Image dimensions: {0}x{1}", im.Width, im.Height);
        }
        private void ddl_Entry_SelectedIndexChanged(object sender, EventArgs e)
        {
            AbstractImage im = GetImageFromComboBoxItem();

            SetupPaletteDropdown();
            Setup8bppCheckbox();
            RefreshPictureBox(true);
        }
예제 #7
0
        public bool ImportEntireFile(string path)
        {
            AbstractImage abIm   = GetImageFromComboBoxItem();
            bool          result = abIm.ImportEntireFile(iso, path);

            RefreshPictureBox(true);
            return(result);
        }
        public void SaveCurrentImage(string path)
        {
            AbstractImage im = GetImageFromComboBoxItem();

            using (System.IO.Stream s = System.IO.File.Open(path, System.IO.FileMode.Create))
            {
                im.SaveImage(iso, s);
            }
        }
 public void LoadToCurrentImage(string path)
 {
     using (Image im = Image.FromFile(path))
     {
         AbstractImage abIm = GetImageFromComboBoxItem();
         abIm.ImportFilename = path;
         abIm.WriteImageToIso(iso, im);
     }
     RefreshPictureBox();
 }
 public void RefreshPictureBox(bool forceReload = false)
 {
     if (comboBox1.SelectedItem != null)
     {
         AbstractImage im          = GetImageFromComboBoxItem();
         Bitmap        image       = im.GetImageFromIso(iso, forceReload);
         Bitmap        zoomedImage = zoom.GetZoomedBitmap(image);
         AssignNewPictureBoxImage(zoomedImage);
         imageSizeLabel.Text = string.Format("Image dimensions: {0}x{1}", im.Width, im.Height);
     }
 }
        public bool ExportEntireFile(string path)
        {
            AbstractImage abIm = GetImageFromComboBoxItem();

            if (abIm.Filesize > 0)
            {
                return(abIm.ExportEntireFile(iso, path, true));
            }
            else
            {
                return(false);
            }
        }
        private void Setup8bppCheckbox(AbstractImage im = null)
        {
            if (im == null)
            {
                im = GetImageFromComboBoxItem();
            }

            if (im.CanSelectPalette())
            {
                chk_8bpp.Checked = ((ISelectablePalette4bppImage)im).ImportExport8bpp;
                chk_8bpp.Visible = true;
            }
            else
            {
                chk_8bpp.Visible = false;
            }
        }
        private void SetupPaletteDropdown(AbstractImage im = null)
        {
            if (im == null)
            {
                im = GetImageFromComboBoxItem();
            }

            if (im.PaletteCount > 0)
            {
                ddl_Palette.Items.Clear();
                for (int index = 0; index < im.PaletteCount; index++)
                {
                    ddl_Palette.Items.Add(index);
                }
                ddl_Palette.SelectedIndex = im.CurrentPalette;

                pnl_Palette.Visible = true;
            }
            else
            {
                pnl_Palette.Visible = false;
            }
        }
예제 #14
0
        private void menuItem_ExportEntireFile_Click(object sender, EventArgs e)
        {
            saveFileDialog.FileName = string.Empty;
            string origFilename = allOtherImagesEditor1.GetCurrentOriginalFilename();
            int    startIndex   = origFilename.LastIndexOf(".") + 1;
            string extension    = origFilename.Substring(startIndex, origFilename.Length - startIndex).ToUpper();

            saveFileDialog.Filter = origFilename + "|" + origFilename + "|" + extension + " files|" + "*." + extension + "|All files|*.*";

            AbstractImage image = allOtherImagesEditor1.GetImageFromComboBoxItem();

            if (image.Filesize == 0)
            {
                MyMessageBox.Show(this, "Exporting entire file is not implemented for this image.", "Not Implemented", MessageBoxButtons.OK);
            }
            else if (saveFileDialog.ShowDialog(this) == DialogResult.OK)
            {
                bool didExport = allOtherImagesEditor1.ExportEntireFile(saveFileDialog.FileName);
                if (!didExport)
                {
                    MyMessageBox.Show(this, "Exporting entire file is not implemented for this image.", "Not Implemented", MessageBoxButtons.OK);
                }
            }
        }
        public bool ImportEntireFile(string path)
        {
            AbstractImageList list  = GetImageListFromComboBoxItem();
            int           listIndex = (list.Count == 1) ? 0 : ddl_Entry.SelectedIndex;
            AbstractImage abIm      = list[listIndex];
            bool          result    = abIm.ImportEntireFile(iso, path);

            if (abIm.IsEffect)
            {
                Type type = abIm.Sector.GetType();

                if (type == typeof(PatcherLib.Iso.PsxIso.Sectors))
                {
                    list.Images[listIndex] = AllOtherImages.GetPSXEffectImage(iso, abIm.EffectIndex);
                }
                else if ((type == typeof(PatcherLib.Iso.PspIso.Sectors)) || (type == typeof(PatcherLib.Iso.FFTPack.Files)))
                {
                    list.Images[listIndex] = AllOtherImages.GetPSPEffectImage(iso, abIm.EffectIndex);
                }
            }

            RefreshPictureBox(true);
            return(result);
        }
예제 #16
0
        private static List <AbstractImage> GetImagesFromNodeInner(XmlDocument doc, XmlNode sectionNode, XmlNode imageNode, List <string> names,
                                                                   int depth = 0, int inIndex = 0, int inOffset = 0, int inPaletteOffset = 0)
        {
            List <AbstractImage> result = new List <AbstractImage>();

            if (imageNode.Name == "Repeat")
            {
                int number = int.Parse(imageNode.Attributes["Number"].InnerText);
                int offset = int.Parse(imageNode.Attributes["Offset"].InnerText);

                XmlAttribute paletteOffsetAttr = imageNode.Attributes["PaletteOffset"];
                int          paletteOffset     = (paletteOffsetAttr == null) ? 0 : int.Parse(imageNode.Attributes["PaletteOffset"].InnerText);

                XmlNode innerNode = imageNode.FirstChild;

                int totalIndex = inIndex;

                for (int index = 0; index < number; index++)
                {
                    XmlNode indexNode = innerNode.CloneNode(true);
                    List <AbstractImage> innerResult = GetImagesFromNodeInner(doc, sectionNode, indexNode, names, depth + 1, totalIndex, inOffset, inPaletteOffset);
                    result.AddRange(innerResult);

                    totalIndex      += innerResult.Count;
                    inOffset        += offset;
                    inPaletteOffset += paletteOffset;
                }
            }
            else
            {
                XmlNode nameNode = imageNode["Name"];
                if (nameNode == null)
                {
                    imageNode.AppendChild(doc.CreateElement("Name"));
                }

                if (depth > 0)
                {
                    imageNode["Name"].InnerText = (inIndex < names.Count) ? names[inIndex] : imageNode["Name"].InnerText + " (" + (inIndex + 1) + ")";

                    XmlNode palettePositionNode = imageNode["PalettePosition"];
                    if (palettePositionNode != null)
                    {
                        imageNode["PalettePosition"]["Offset"].InnerText = (int.Parse(imageNode["PalettePosition"]["Offset"].InnerText) + inPaletteOffset).ToString();
                    }

                    imageNode["Position"]["Offset"].InnerText = (int.Parse(imageNode["Position"]["Offset"].InnerText) + inOffset).ToString();
                }

                if (string.IsNullOrEmpty(imageNode["Name"].InnerText) && (inIndex < names.Count))
                {
                    imageNode["Name"].InnerText = names[inIndex];
                }

                EnsureImageNodeProperty(doc, sectionNode, imageNode, "Filename");
                EnsureImageNodeProperty(doc, sectionNode, imageNode, "Filesize");

                var  types = ImageTypes;
                Type type  = types.Find(t => t.Name == imageNode.Name);
                System.Reflection.MethodInfo mi = type.GetMethod("ConstructFromXml");
                AbstractImage image             = (AbstractImage)mi.Invoke(null, new object[] { imageNode });
                result.Add(image);
            }

            return(result);
        }
예제 #17
0
 public bool CanSelectPalette(AbstractImage img = null)
 {
     img = img ?? this;
     //return ((img is PalettedImage4bpp) || (img is PalettedImage4bppSectioned) || (img is StupidTM2Image4bpp));
     return (img is ISelectablePalette4bppImage);
 }
예제 #18
0
        private void SetupPaletteDropdown(AbstractImage im = null)
        {
            if (im == null)
            {
                im = GetImageFromComboBoxItem();
            }

            if (im.PaletteCount > 0)
            {
                ddl_Palette.Items.Clear();
                for (int index = 0; index < im.PaletteCount; index++)
                {
                    ddl_Palette.Items.Add((index + 1));
                }
                ddl_Palette.SelectedIndex = im.CurrentPalette;

                pnl_Palette.Visible = true;
            }
            else
            {
                pnl_Palette.Visible = false;
            }
        }
예제 #19
0
        private void Setup8bppCheckbox(AbstractImage im = null)
        {
            if (im == null)
            {
                im = GetImageFromComboBoxItem();
            }

            if (im.CanSelectPalette())
            {
                chk_8bpp.Checked = ((ISelectablePalette4bppImage)im).ImportExport8bpp;
                chk_8bpp.Visible = true;
            }
            else
            {
                chk_8bpp.Visible = false;
            }
        }
예제 #20
0
 public bool CanSelectPalette(AbstractImage img = null)
 {
     img = img ?? this;
     //return ((img is PalettedImage4bpp) || (img is PalettedImage4bppSectioned) || (img is StupidTM2Image4bpp));
     return(img is ISelectablePalette4bppImage);
 }
        public string GetCurrentImageInputFileFilter()
        {
            AbstractImage im = GetImageFromComboBoxItem();

            return(im.InputFilenameFilter);
        }