Пример #1
0
        /// <summary>Identifies a ResourceData's type based from a hint, then falling back on the intrinsic data; and returns the data as a subclass of ResourceData.</summary>
        public static ResourceData GetResourceData(ResourceLang lang, ResourceHint hint, Byte[] rawData)
        {
            // an alternative (and for performance reasons), if Hinting doesn't work it falls back to UnknownResourceData and it's up to the user or consumer to attempt to recast it as a specific ResourceData subclass
            // If it does brute-force, there should be some presumption of type based on the ResourceType rather than brute-force all members of that ResourceType

            if (hint != ResourceHint.Unknown)
            {
                ResourceData data;

                if ((data = Heuristic(lang, hint, rawData)) != null)
                {
                    return(data);
                }
            }             // endif hint is known defined type

            return(BruteForce(lang, rawData));
        }
Пример #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);
        }