Пример #1
0
        private void readXbe(DoWorkEventArgs e)
        {
            IsoDetailsResults results = null;
            byte[] xbe = null;
            base.ReportProgress(0, new IsoDetailsResults(IsoDetailsResultsType.Progress, "Locating default.xbe..."));
            try
            {
                xbe = this.iso.GetFile("default.xbe");
            }
            catch (Exception exception)
            {
                base.ReportProgress(0, new IsoDetailsResults(IsoDetailsResultsType.Error, "Unable to extract default.xbe. Reason:\n\n" + exception.Message));
                return;
            }
            base.ReportProgress(0, new IsoDetailsResults(IsoDetailsResultsType.Progress, "Found! Reading default.xbe..."));
            using (XbeInfo info = new XbeInfo(xbe))
            {
                if (!info.IsValid)
                {
                    base.ReportProgress(0, new IsoDetailsResults(IsoDetailsResultsType.Error, "Default.xbe was not valid."));
                    return;
                }
                results = new IsoDetailsResults(info.Certifcate.TitleName, info.Certifcate.TitleID, (info.Certifcate.DiskNumber > 0) ? info.Certifcate.DiskNumber.ToString() : "1") {
                    DiscCount = "1"
                };
                base.ReportProgress(0, new IsoDetailsResults(IsoDetailsResultsType.Progress, "Extracting thumbnail..."));
                foreach (XbeSection section in info.Sections)
                {
                    if (section.Name == "$$XSIMAGE")
                    {
                        try
                        {
                            XPR xpr = new XPR(section.Data);
                            DDS dds = xpr.ConvertToDDS(0x40, 0x40);
                            Bitmap bitmap = new Bitmap(0x40, 0x40);
                            switch (xpr.Format)
                            {
                                case XPRFormat.ARGB:
                                    bitmap = (Bitmap) dds.GetImage(DDSType.ARGB);
                                    break;

                                case XPRFormat.DXT1:
                                    bitmap = (Bitmap) dds.GetImage(DDSType.DXT1);
                                    break;
                            }
                            MemoryStream stream = new MemoryStream();
                            bitmap.Save(stream, ImageFormat.Png);
                            results.Thumbnail = (Image) bitmap.Clone();
                            results.RawThumbnail = (byte[]) stream.ToArray().Clone();
                            bitmap.Dispose();
                            stream.Dispose();
                            if (xpr.Format == XPRFormat.ARGB)
                            {
                                base.ReportProgress(0, new IsoDetailsResults(IsoDetailsResultsType.Error, "XBE thumbnail type is not supported or is corrupt."));
                            }
                        }
                        catch (Exception exception2)
                        {
                            base.ReportProgress(0, new IsoDetailsResults(IsoDetailsResultsType.Error, "Failed to convert thumbnail DDS to PNG.\n\n" + exception2.Message));
                        }
                    }
                }
                if (results.Thumbnail == null)
                {
                    foreach (XbeSection section2 in info.Sections)
                    {
                        if (section2.Name == "$$XTIMAGE")
                        {
                            try
                            {
                                XPR xpr2 = new XPR(section2.Data);
                                DDS dds2 = xpr2.ConvertToDDS(0x80, 0x80);
                                Bitmap bitmap2 = new Bitmap(0x80, 0x80);
                                switch (xpr2.Format)
                                {
                                    case XPRFormat.ARGB:
                                        bitmap2 = (Bitmap) dds2.GetImage(DDSType.ARGB);
                                        break;

                                    case XPRFormat.DXT1:
                                        bitmap2 = (Bitmap) dds2.GetImage(DDSType.DXT1);
                                        break;
                                }
                                Image image = new Bitmap(0x40, 0x40);
                                Graphics graphics = Graphics.FromImage(image);
                                graphics.DrawImage(bitmap2, 0, 0, 0x40, 0x40);
                                MemoryStream stream2 = new MemoryStream();
                                image.Save(stream2, ImageFormat.Png);
                                results.Thumbnail = (Image) image.Clone();
                                results.RawThumbnail = (byte[]) stream2.ToArray().Clone();
                                stream2.Dispose();
                                bitmap2.Dispose();
                                graphics.Dispose();
                                if (xpr2.Format == XPRFormat.ARGB)
                                {
                                    base.ReportProgress(0, new IsoDetailsResults(IsoDetailsResultsType.Error, "XBE Thumbnail type is not supported or is corrupt."));
                                }
                            }
                            catch (Exception exception3)
                            {
                                base.ReportProgress(0, new IsoDetailsResults(IsoDetailsResultsType.Error, "Failed to convert thumbnail DDS to PNG.\n\n" + exception3.Message));
                            }
                        }
                    }
                }
            }
            e.Result = results;
        }
Пример #2
0
        private void readXbe(DoWorkEventArgs e)
        {
            IsoDetailsResults results = null;

            byte[] xbe = null;
            base.ReportProgress(0, new IsoDetailsResults(IsoDetailsResultsType.Progress, "Locating default.xbe..."));
            try
            {
                xbe = this.iso.GetFile("default.xbe");
            }
            catch (Exception exception)
            {
                base.ReportProgress(0, new IsoDetailsResults(IsoDetailsResultsType.Error, "Unable to extract default.xbe. Reason:\n\n" + exception.Message));
                return;
            }
            base.ReportProgress(0, new IsoDetailsResults(IsoDetailsResultsType.Progress, "Found! Reading default.xbe..."));
            using (XbeInfo info = new XbeInfo(xbe))
            {
                if (!info.IsValid)
                {
                    base.ReportProgress(0, new IsoDetailsResults(IsoDetailsResultsType.Error, "Default.xbe was not valid."));
                    return;
                }
                results = new IsoDetailsResults(info.Certifcate.TitleName, info.Certifcate.TitleID, (info.Certifcate.DiskNumber > 0) ? info.Certifcate.DiskNumber.ToString() : "1")
                {
                    DiscCount = "1"
                };
                base.ReportProgress(0, new IsoDetailsResults(IsoDetailsResultsType.Progress, "Extracting thumbnail..."));
                foreach (XbeSection section in info.Sections)
                {
                    if (section.Name == "$$XSIMAGE")
                    {
                        try
                        {
                            XPR    xpr    = new XPR(section.Data);
                            DDS    dds    = xpr.ConvertToDDS(0x40, 0x40);
                            Bitmap bitmap = new Bitmap(0x40, 0x40);
                            switch (xpr.Format)
                            {
                            case XPRFormat.ARGB:
                                bitmap = (Bitmap)dds.GetImage(DDSType.ARGB);
                                break;

                            case XPRFormat.DXT1:
                                bitmap = (Bitmap)dds.GetImage(DDSType.DXT1);
                                break;
                            }
                            MemoryStream stream = new MemoryStream();
                            bitmap.Save(stream, ImageFormat.Png);
                            results.Thumbnail    = (Image)bitmap.Clone();
                            results.RawThumbnail = (byte[])stream.ToArray().Clone();
                            bitmap.Dispose();
                            stream.Dispose();
                            if (xpr.Format == XPRFormat.ARGB)
                            {
                                base.ReportProgress(0, new IsoDetailsResults(IsoDetailsResultsType.Error, "XBE thumbnail type is not supported or is corrupt."));
                            }
                        }
                        catch (Exception exception2)
                        {
                            base.ReportProgress(0, new IsoDetailsResults(IsoDetailsResultsType.Error, "Failed to convert thumbnail DDS to PNG.\n\n" + exception2.Message));
                        }
                    }
                }
                if (results.Thumbnail == null)
                {
                    foreach (XbeSection section2 in info.Sections)
                    {
                        if (section2.Name == "$$XTIMAGE")
                        {
                            try
                            {
                                XPR    xpr2    = new XPR(section2.Data);
                                DDS    dds2    = xpr2.ConvertToDDS(0x80, 0x80);
                                Bitmap bitmap2 = new Bitmap(0x80, 0x80);
                                switch (xpr2.Format)
                                {
                                case XPRFormat.ARGB:
                                    bitmap2 = (Bitmap)dds2.GetImage(DDSType.ARGB);
                                    break;

                                case XPRFormat.DXT1:
                                    bitmap2 = (Bitmap)dds2.GetImage(DDSType.DXT1);
                                    break;
                                }
                                Image    image    = new Bitmap(0x40, 0x40);
                                Graphics graphics = Graphics.FromImage(image);
                                graphics.DrawImage(bitmap2, 0, 0, 0x40, 0x40);
                                MemoryStream stream2 = new MemoryStream();
                                image.Save(stream2, ImageFormat.Png);
                                results.Thumbnail    = (Image)image.Clone();
                                results.RawThumbnail = (byte[])stream2.ToArray().Clone();
                                stream2.Dispose();
                                bitmap2.Dispose();
                                graphics.Dispose();
                                if (xpr2.Format == XPRFormat.ARGB)
                                {
                                    base.ReportProgress(0, new IsoDetailsResults(IsoDetailsResultsType.Error, "XBE Thumbnail type is not supported or is corrupt."));
                                }
                            }
                            catch (Exception exception3)
                            {
                                base.ReportProgress(0, new IsoDetailsResults(IsoDetailsResultsType.Error, "Failed to convert thumbnail DDS to PNG.\n\n" + exception3.Message));
                            }
                        }
                    }
                }
            }
            e.Result = results;
        }