Ejemplo n.º 1
0
        private void Validate()
        {
            if (Size.Width == 0 && Size.Height == 0)
            {
                Size = new Size(256, 256);
            }
            else if (Size.Width == 0)
            {
                Size = new Size(256, Size.Height);
            }
            else if (Size.Height == 0 && ParentIcon.Type == IconType.Icon)
            {
                Size = new Size(Size.Width, 256);
            }

            if (ParentIcon.Type == IconType.Icon && ColorCount > 0 && BitCount == 0
                ) // this regularly happens, so let's fix it
            {
                BitCount = (ushort)Math.Log(
                    ColorCount,
                    2
                    ); // but it only works when ColorCount > 0 which doesn't apply to 16, 24, and 32-bit icons
            }
            if (BitCount == 0)
            {
                // get it from the ImageData, which is painful

                // IconPro does it in AdjustIconImagePointers
                // it casts the raw image data as BMP then reads in the DIB headers
                // but this wouldn't work for PNG-format icons

                // so check for the PNG header first

                if (PngImageResourceData.HasPngSignature(ImageData))
                {
                    BitCount = 32; // I know you can get non-32-bit PNGs, but meh
                }
                else
                {
                    var dib = new Dib(ImageData);
                    BitCount = (ushort)dib.BitCount;
                }
            }

            Description = string.Format(
                CultureInfo.InvariantCulture,
                "{0}x{1} {2}-bit",
                Size.Width,
                Size.Height,
                BitCount
                );
        }
Ejemplo n.º 2
0
        /// <summary>Tests the ResourceData type as specified by the hint. If it works it returns a ResourceData. If it fails it returns null.</summary>
        private static ResourceData Heuristic(ResourceLang lang, ResourceHint hint, Byte[] rawData)
        {
            // try the hint's suggestion, if it doesn't fall-back on the tried 'n' true brute-force approach

            ResourceData rd;

            switch (hint)
            {
                #region Image

            case ResourceHint.Bitmap:

                if (BmpImageResourceData.TryCreate(lang, rawData, out rd))
                {
                    return(rd);
                }
                break;

            case ResourceHint.Gif:

                if (GifImageResourceData.TryCreate(lang, rawData, out rd))
                {
                    return(rd);
                }
                break;

            case ResourceHint.Jpeg:

                if (JpegImageResourceData.TryCreate(lang, rawData, out rd))
                {
                    return(rd);
                }
                break;

            case ResourceHint.Png:

                if (PngImageResourceData.TryCreate(lang, rawData, out rd))
                {
                    return(rd);
                }
                break;

                #endregion

                #region Directory

            case ResourceHint.CursorDirectory:

                if (CursorDirectoryResourceData.TryCreate(lang, rawData, out rd))
                {
                    return(rd);
                }

                break;

            case ResourceHint.IconDirectory:

                if (IconDirectoryResourceData.TryCreate(lang, rawData, out rd))
                {
                    return(rd);
                }

                break;

                #endregion

            // experiment:

            case ResourceHint.IconImage:

                if (IconImageResourceData.TryCreate(lang, rawData, out rd))
                {
                    return(rd);
                }
                break;

/*					case Win32ResourceType.CursorImage:
 *                              case Win32ResourceType.IconImage:
 *
 *                                      retval = new IconCursorImageResourceData(lang, rawData);
 *                                      break;
 *
 * //					case Win32ResourceType.CursorAnimated: // I have zero documentation on these 'animated' types
 * //					case Win32ResourceType.IconAnimated:
 *                              case Win32ResourceType.CursorDirectory:
 *                              case Win32ResourceType.IconDirectory:
 *
 *                                      retval = new IconCursorDirectoryResourceData(lang, rawData);
 *                                      break;
 *
 *                              case Win32ResourceType.Manifest:
 *
 *                                      retval = new XmlHtmlResourceData(lang, rawData);
 *                                      break;
 *
 *                              case Win32ResourceType.Version:
 *
 *                                      retval = new VersionResourceData(lang, rawData);
 *                                      break;
 */
            }

            return(null);
        }