コード例 #1
0
        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);
        }