/////////////////////////////////////// private Image GetIconForResourceLang(ResourceLang lang) { ResourceData data = lang.Data; if (data is IconDirectoryResourceData) { IconDirectoryResourceData icoDir = data as IconDirectoryResourceData; IconImage bestMember = icoDir.IconGroup.GetIconForSize(__images.ImageSize); if (bestMember == null) { return(null); } IconCursorImageResourceData rd = (bestMember.ResourceData as IconCursorImageResourceData); return(rd.Image); } else if (data is CursorDirectoryResourceData) { CursorDirectoryResourceData curDir = data as CursorDirectoryResourceData; IconImage bestMember = curDir.IconGroup.GetIconForSize(__images.ImageSize); if (bestMember == null) { return(null); } IconCursorImageResourceData rd = (bestMember.ResourceData as IconCursorImageResourceData); return(rd.Image); } else if (data is IconCursorImageResourceData) { IconCursorImageResourceData icoImg = data as IconCursorImageResourceData; return(icoImg.Image); } else if (data is ImageResourceData) { ImageResourceData imgData = data as ImageResourceData; Size s = __images.ImageSize; Image thumb = GetThumbnailImage(s, imgData.Image); return(thumb); } else { return(null); } }
/// <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); }