public static void RebuildStringImageCache([NotNull] Firmware firmware, BlockType blockType) { if (firmware == null) { throw new ArgumentNullException("firmware"); } var firmwareImages = blockType == BlockType.Block1 ? firmware.Block1Images : firmware.Block2Images; if (firmwareImages.Count == 0) { return; } var glyphData = new Dictionary <int, bool[, ]>(); foreach (var kvp in firmwareImages) { glyphData[kvp.Key] = firmware.ReadImage(kvp.Value); } var stringImageCache = new Dictionary <int, Image>(); foreach (var stringMetadata in firmware.Block1Strings.Concat(firmware.Block2Strings)) { try { var stringData = firmware.ReadString(stringMetadata); var imageData = FirmwareImageProcessor.GetStringImageData(stringData, glyphData, firmware.Definition.StringsPreviewCorrection != null ? firmware.Definition.StringsPreviewCorrection.ForGlyphs : null); var image = BitmapProcessor.CreateBitmapFromRaw(imageData, 1); stringImageCache[stringMetadata.Index] = image; } catch { stringImageCache[stringMetadata.Index] = new Bitmap(1, 1); } } SetStringCache(blockType, stringImageCache); }