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; } }
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; }