private bool[,] ProcessImage(Func <bool[, ], bool[, ]> imageDataProcessor, FirmwareImageMetadata imageMetadata, bool rebuildCache = false)
        {
            var processedData      = imageDataProcessor(ImagePixelGrid.Data);
            var processedImageSize = processedData.GetSize();
            var imageSizeChanged   = imageMetadata.Width != processedImageSize.Width || imageMetadata.Height != processedImageSize.Height;

            imageMetadata.Width  = (byte)processedImageSize.Width;
            imageMetadata.Height = (byte)processedImageSize.Height;

            m_firmware.WriteImage(processedData, imageMetadata);

            if (imageSizeChanged || rebuildCache)
            {
                ImageCacheManager.RebuildImageCache(m_firmware);
                ImageListBox.Invalidate();
            }
            else
            {
                var cachedImage = FirmwareImageProcessor.CreateBitmap(processedData);
                ImageCacheManager.SetImage(imageMetadata.Index, imageMetadata.BlockType, cachedImage);

                var updateCache = new Action(() =>
                {
                    ImageListBox.Invoke(new Action(() =>
                    {
                        var itemRect = ImageListBox.GetItemRectangle(imageMetadata.Index - 1);
                        ImageListBox.Invalidate(itemRect);
                    }));
                });
                updateCache.BeginInvoke(null, null);
            }

            return(processedData);
        }
        private void UpdateImageStatusLabel([CanBeNull] FirmwareImageMetadata metadata)
        {
            if (metadata == null)
            {
                return;
            }

            ImageStatusLabel.Text = string.Format
                                    (
                "Image: 0x{0:X2}, Size: {1}x{2}, Reference: 0x{3:X4}, Data: 0x{4:X4}, Length: {5} bytes",
                metadata.Index,
                metadata.Width,
                metadata.Height,
                metadata.ImageReferenceOffset,
                metadata.DataOffset,
                metadata.DataLength + 2
                                    );

            var selectedItemsCount = ImageListBox.SelectedIndices.Count;

            if (selectedItemsCount > 1)
            {
                if (!ImageListBoxStatusStrip.Visible)
                {
                    ImageListBoxStatusStrip.Visible = true;
                }
                ImageListBoxStatusLabel.Text = @"Selected: " + selectedItemsCount;
            }
            else
            {
                ImageListBoxStatusStrip.Visible = false;
            }
        }
Example #3
0
 internal static bool[,] CreateImage([NotNull] this FirmwareImageMetadata imageMetadata)
 {
     if (imageMetadata == null)
     {
         throw new ArgumentNullException("imageMetadata");
     }
     return(new bool[imageMetadata.Width, imageMetadata.Height]);
 }
        private void UpdateImageStatusLabel([CanBeNull] FirmwareImageMetadata metadata)
        {
            if (metadata == null)
            {
                return;
            }

            ImageSizeLabel.Text = string.Format("Image: {0}x{1}, Offset: 0x{2:X4}, Length: {3} bytes", metadata.Width, metadata.Height, metadata.DataOffset, metadata.DataLength + 2);
        }
 public LetterBox(FirmwareImageMetadata metadata, Rectangle rect)
 {
     Metadata = metadata;
     Rect     = rect;
 }
        private bool[,] ProcessImage(Func<bool[,], bool[,]> imageDataProcessor, FirmwareImageMetadata imageMetadata, bool rebuildCache = false)
        {
            var processedData = imageDataProcessor(ImagePixelGrid.Data);
            var processedImageSize = processedData.GetSize();
            var imageSizeChanged = imageMetadata.Width != processedImageSize.Width || imageMetadata.Height != processedImageSize.Height;

            imageMetadata.Width = (byte)processedImageSize.Width;
            imageMetadata.Height = (byte)processedImageSize.Height;

            m_firmware.WriteImage(processedData, imageMetadata);

            if (imageSizeChanged || rebuildCache)
            {
                ImageCacheManager.RebuildCache(m_firmware);
                ImageListBox.Invalidate();
            }
            else
            {
                var cachedImage = BitmapProcessor.CreateBitmapFromRaw(processedData);
                ImageCacheManager.SetGlyphImage(imageMetadata.Index, imageMetadata.BlockType, cachedImage);
                ImageCacheManager.RebuildStringImageCache(m_firmware, imageMetadata.BlockType);
                var updateCache = new Action(() =>
                {
                    ImageListBox.Invoke(new Action(() =>
                    {
                        var itemRect = ImageListBox.GetItemRectangle(imageMetadata.Index - 1);
                        ImageListBox.Invalidate(itemRect);
                    }));
                });
                updateCache.BeginInvoke(null, null);
            }

            IsDirty = true;
            return processedData;
        }
 public LetterBox(FirmwareImageMetadata metadata, Rectangle rect)
 {
     Metadata = metadata;
     Rect = rect;
 }