/// <summary> /// Called from the main form when the user changes the page number /// from outside this control (main menu or the viewer control) /// </summary> public void SetCurrentPageNumber(int pageNumber) { if (pageNumber != CurrentPageNumber && pageNumber <= _rasterImageList.Items.Count) { // De-select all items but 'pageNumber' _rasterImageList.BeginUpdate(); for (int i = 0; i < _rasterImageList.Items.Count; i++) { ImageViewerItem item = _rasterImageList.Items[i]; if (i == (pageNumber - 1)) { item.IsSelected = true; } else { item.IsSelected = false; } } _rasterImageList.EnsureItemVisibleByIndex(pageNumber - 1); _rasterImageList.EndUpdate(); } UpdateUIState(); }
public void SetCurrentPageIndex(int pageIndex) { if (pageIndex != CurrentPageIndex) { // De-select all items but 'pageIndex' _rasterImageList.BeginUpdate(); for (int i = 0; i < _rasterImageList.Items.Count; i++) { ImageViewerItem item = _rasterImageList.Items[i]; if (i == pageIndex) { item.IsSelected = true; } else { item.IsSelected = false; } } _rasterImageList.EnsureItemVisible(_rasterImageList.Items[pageIndex]); _rasterImageList.EndUpdate(); _oldSelectedItem = _rasterImageList.Items.GetSelected(); } UpdateUIState(); }
protected override object LoadItem(ImageViewerItem item) { // This method is called when an item comes into view // and is not cached in memory // For this example, all we need is to load the image // from the original file. But we can also load other // state and data from a database or using deserilization. // In our demo, the item index is the page index // However, we can use the item .Tag property or derive our // own class to hold the data needed to load the page // Index is 0-based, so add 1 to get the page number var pageNumber = this.ImageViewer.Items.IndexOf(item) + 1; // Load the page and return it if (_useSVG) { var svgDocument = _rasterCodecs.LoadSvg(_imageFileName, pageNumber, null) as SvgDocument; // Ensure the SVG optimized for fast viewing MainForm.OptimizeForView(svgDocument); return(svgDocument); } else { var rasterImage = _rasterCodecs.Load(_imageFileName, 0, CodecsLoadByteOrder.BgrOrGray, pageNumber, pageNumber); return(rasterImage); } }
public void TryGotoPage(int pageNumber) { // Check if the index is valid if (pageNumber >= FirstPage && pageNumber <= LastPage) { int page = pageNumber - FirstPage; // Set the page number in the image list _imageList.BeginUpdate(); for (int i = 0; i < PagesCount; i++) { ImageViewerItem item = _imageList.Items[i]; if ((int)item.Tag == pageNumber) { item.IsSelected = true; } else { item.IsSelected = false; } } _imageList.EnsureItemVisible(_imageList.Items[page]); _imageList.EndUpdate(); } }
private void TryAddFloater(ImageViewerItem item) { PDF417BarcodeData barcodeData = (PDF417BarcodeData)BarcodeData.CreateDefaultBarcodeData(BarcodeSymbology.PDF417); barcodeData.SetData(_data); _engine.Writer.CalculateBarcodeDataBounds(LeadRect.Empty, item.Image.XResolution, item.Image.YResolution, barcodeData, _writeOptions); if (barcodeData.Rect.Width <= item.Image.Width && barcodeData.Rect.Height <= item.Image.Height) { _bigEnoughForBarcode = true; this.ImageViewer.Cursor = System.Windows.Forms.Cursors.Default; RasterImage floaterImage = RasterImage.Create(barcodeData.Rect.Width, barcodeData.Rect.Height, 32, Math.Max(item.Image.XResolution, item.Image.YResolution), RasterColor.Create(0, 255, 255, 255)); _engine.Writer.WriteBarcode(floaterImage, barcodeData, _writeOptions); item.Floater = floaterImage; item.FloaterOpacity = 0.5; } else { this.ImageViewer.Cursor = System.Windows.Forms.Cursors.No; _bigEnoughForBarcode = false; } }
void _rasterImageList_PostRender(object sender, Leadtools.Controls.ImageViewerRenderEventArgs e) { for (int i = 0; i < _rasterImageList.Items.Count; i++) { ImageViewerItem item = _rasterImageList.Items[i]; LeadRectD itemLeadRect = _rasterImageList.GetItemBounds(item, ImageViewerItemPart.Item); Rectangle itemRect = new Rectangle((int)itemLeadRect.X, (int)itemLeadRect.Y, (int)itemLeadRect.Width, (int)itemLeadRect.Height); LeadSize itemImageSize = _rasterImageList.GetItemImageSize(item, false); LeadRect imageRect = new LeadRect( itemRect.Left + (itemRect.Width - itemImageSize.Width) / 2, itemRect.Top + (itemRect.Height - itemImageSize.Height) / 2, itemImageSize.Width, itemImageSize.Height); itemLeadRect = ImageViewer.GetDestinationRectangle(item.Image.ImageWidth, item.Image.ImageHeight, imageRect, ControlSizeMode.None, ControlAlignment.Near, ControlAlignment.Near).ToLeadRectD(); var destRect = LeadRectD.Create(itemLeadRect.X, itemLeadRect.Y, itemLeadRect.Width * 720.0 / 96.0, itemLeadRect.Height * 720.0 / 96.0); destRect.X = 0.0; destRect.Y = 0.0; //Get the graphic object from the item's image to draw (burn) annotations on it. Leadtools.Drawing.RasterImageGdiPlusGraphicsContainer GdiPlusGraphicsContainer = new RasterImageGdiPlusGraphicsContainer(item.Image); Graphics g = GdiPlusGraphicsContainer.Graphics; // Use anti-aliasing g.SmoothingMode = SmoothingMode.AntiAlias; // Now draw the annotation s on this rectangle if (_automationManager != null && _automation.Containers.Count > 0 && _automation.Containers.Count > i) { AnnContainer container = _automation.Containers[i]; //Clear the old painting g.Clear(Color.White); //Burn the current annotations to the image list item if (container != null) { AnnWinFormsRenderingEngine engine = new AnnWinFormsRenderingEngine(); engine.Resources = _automationManager.Resources; // Save its visible state and set it to true (it is false if viewer is in single mode) bool containerIsVisible = container.IsVisible; container.IsVisible = true; engine.Attach(container, g); engine.BurnToRectWithDpi(destRect, 96, 96, 96, 96); engine.Detach(); if (container.IsVisible != containerIsVisible) { container.IsVisible = containerIsVisible; } } } } }
public void SetCurrentPageNumber(int pageNumber) { _ignoreSelectedChanged = true; int pageIndex = pageNumber - 1; // De-select all items but 'pageIndex' _rasterImageList.BeginUpdate(); for (int i = 0; i < _rasterImageList.Items.Count; i++) { ImageViewerItem item = _rasterImageList.Items[i]; if (i == pageIndex) { item.IsSelected = true; } else { item.IsSelected = false; } } _rasterImageList.EnsureItemVisibleByIndex(pageIndex); _rasterImageList.EndUpdate(); _ignoreSelectedChanged = false; }
protected override void SaveItem(ImageViewerItem item, object data) { // This method is called when an item is about to be deleted // from the cache. In this example, we do not have anything to do // but you can modify the code if your application needs to serialize // data to disk or a database for example }
/// <summary> /// Called by the main form to set a new document into the viewer /// </summary> public void SetDocument(string documentFileName, int firstPageNumber, int lastPageNumber, RasterCodecs rasterCodecsInstance) { _documentFileName = documentFileName; _rasterCodecsInstance = rasterCodecsInstance; // Create the pages thumbnails _imageList.Items.Clear(); for (int pageNumber = firstPageNumber; pageNumber <= lastPageNumber; pageNumber++) { RasterImage thumbnailImage = _rasterCodecsInstance.Load(_documentFileName, 160, 160, 0, RasterSizeFlags.Resample, CodecsLoadByteOrder.BgrOrGray, pageNumber, pageNumber); if (thumbnailImage != null) { int viewPageNumber = pageNumber - firstPageNumber + 1; ImageViewerItem item = new ImageViewerItem(); item.Image = thumbnailImage; item.Tag = pageNumber; item.Text = "Page " + viewPageNumber.ToString(); _imageList.Items.Add(item); } _imageList.Items[0].IsSelected = true; } UpdateImageInfo(); UpdatePageInfo(); UpdateUIState(); }
public void SetDocument(PDFDocument document) { _rasterImageList.BeginUpdate(); _bookmarksTreeView.BeginUpdate(); _signaturesTreeView.BeginUpdate(); _rasterImageList.Items.Clear(); _bookmarksTreeView.Nodes.Clear(); _signaturesTreeView.Nodes.Clear(); // This is the image we will load till the thumbnails are loaded using (Bitmap loadingThumbnailBitmap = global::PDFDocumentDemo.Properties.Resources.LoadingThumbnail) { using (RasterImage itemImage = RasterImageConverter.ConvertFromImage(loadingThumbnailBitmap, ConvertFromImageOptions.None)) { if (document != null && document.Pages.Count >= 1) { for (int page = 1; page <= document.Pages.Count; page++) { // We need to clone itemImage since the image list has AutoDisposeImages set to true ImageViewerItem item = new ImageViewerItem(); item.Image = itemImage.Clone(); item.PageNumber = page; item.Text = "Page " + page.ToString(); _rasterImageList.Items.Add(item); } } } } // Add the bookmarks (if any) if (document != null && document.Bookmarks != null) { AddBookmarks(document.Bookmarks); } // Add the signatures (if any) if (document != null) { AddSignatures(document); } _rasterImageList.EndUpdate(); _bookmarksTreeView.EndUpdate(); _signaturesTreeView.EndUpdate(); if (document != null && document.Pages.Count >= 1) { // Start reading the thumbnails _generateThumbnailsWorker.Start(document, _rasterImageList.GetItemImageSize(_rasterImageList.ActiveItem, true).Width, _rasterImageList.GetItemImageSize(_rasterImageList.ActiveItem, true).Height); } UpdateUIState(); }
private void _mnuOverlaysInsertOverlay_Click(object sender, EventArgs e) { try { OpenFileDialog dlg = new OpenFileDialog(); dlg.Filter = "All Files (*.*)|*.*"; dlg.FilterIndex = 0; if (dlg.ShowDialog() == DialogResult.OK) { RasterImage overlay; RasterCodecs codecs = new RasterCodecs(); overlay = codecs.Load(dlg.FileName, 1, CodecsLoadByteOrder.Bgr, 1, 1); ImageViewerItem item = new ImageViewerItem(); int overlayIndex; // Add to image list item.Image = overlay; _rasterImageList.Items.Add(item); overlayIndex = _rasterImageList.Items.Count - 1; _rasterImageList.Items.Select(null);// .SelectAll(false); // Add to Viewer _rasterImageViewer.Image.SetOverlayImage(overlayIndex, item.Image, RasterGetSetOverlayImageMode.Copy); // Update Attributes RasterOverlayAttributes attributes = _rasterImageViewer.Image.GetOverlayAttributes(overlayIndex, RasterGetSetOverlayAttributesFlags.Flags); attributes.AutoPaint = _mnuOverlaysShowOverlay.Checked; attributes.Origin = new LeadPoint(0, 0); attributes.Color = new RasterColor(0xFF, 0xFF, 0xFF); attributes.Columns = item.Image.ImageWidth; attributes.Rows = item.Image.ImageHeight; attributes.BitsAllocated = 1; attributes.FramesInOverlay = item.Image.PageCount; attributes.ImageFrameOrigin = 1; attributes.Type = "G"; _rasterImageViewer.Image.UpdateOverlayAttributes(overlayIndex, attributes, RasterGetSetOverlayAttributesFlags.Flags | RasterGetSetOverlayAttributesFlags.Origin | RasterGetSetOverlayAttributesFlags.Color | RasterGetSetOverlayAttributesFlags.Dicom); _rasterImageList.Items[overlayIndex].IsSelected = true; EnableOverlayOptions(); } } catch (Exception ex) { Messager.ShowError(this, ex); } }
private void LoadOverlays() { if (_DataSet.OverlayCount > 0) { for (int i = 0; i < _DataSet.OverlayCount; i++) { ImageViewerItem item = new ImageViewerItem(); item.Size = new LeadSize(100, 100); item.Zoom(ControlSizeMode.FitAlways, 1, _rasterImageList.DefaultZoomOrigin.ToLeadPointD()); RasterOverlayAttributes attribte = _DataSet.GetOverlayAttributes(0); if (attribte.FramesInOverlay > 1) { item.Image = _DataSet.GetOverlayImages(0, 0, attribte.FramesInOverlay); } else { // Add to image list item.Image = _rasterImageViewer.Image.GetOverlayImage(i, RasterGetSetOverlayImageMode.Copy); _rasterImageList.Items.Add(item); _rasterImageList.Items.Select(null); _rasterImageList.Items[i].IsSelected = true; // Add to Viewer _rasterImageViewer.Image.SetOverlayImage(i, item.Image, RasterGetSetOverlayImageMode.Copy); // Update Attributes RasterOverlayAttributes attributes = _rasterImageViewer.Image.GetOverlayAttributes(i, RasterGetSetOverlayAttributesFlags.Flags); attributes.AutoPaint = _mnuOverlaysShowOverlay.Checked; attributes.AutoProcess = true; attributes.Origin = new LeadPoint(0, 0); attributes.Color = new RasterColor(_overlayColor.R, _overlayColor.G, _overlayColor.B); attributes.Columns = item.Image.ImageWidth; attributes.Rows = item.Image.ImageHeight; attributes.BitsAllocated = 1; attributes.FramesInOverlay = item.Image.PageCount; attributes.ImageFrameOrigin = 1; attributes.Type = "G"; _rasterImageViewer.Image.UpdateOverlayAttributes(i, attributes, RasterGetSetOverlayAttributesFlags.Flags | RasterGetSetOverlayAttributesFlags.Origin | RasterGetSetOverlayAttributesFlags.Color | RasterGetSetOverlayAttributesFlags.Dicom); } } } else { MessageBox.Show("This dataset has no overlays.\nTo insert a new overlay, please select \"Overlays\\ Insert Overlay\" from the menu."); } }
/// <summary> /// Populate the control with thumbnails of the pages in the image /// </summary> public void SetDocument(RasterImage image) { _rasterImageList.BeginUpdate(); _rasterImageList.Items.Clear(); // Only add the thumbnails if the image has more than 1 page if (image != null && image.PageCount > 1) { image.DisableEvents(); int originalImagePageNumber = image.Page; try { LeadSize thumbSize = _rasterImageList.ItemSize; for (int page = 1; page <= image.PageCount; page++) { image.Page = page; RasterImage thumbnailImage = image.CreateThumbnail(thumbSize.Width, thumbSize.Height, 24, RasterViewPerspective.TopLeft, RasterSizeFlags.Resample); ImageViewerItem item = new ImageViewerItem(); item.Image = thumbnailImage; item.PageNumber = 1; item.Text = DemosGlobalization.GetResxString(GetType(), "Resx_Page") + page.ToString(); if (page == originalImagePageNumber) { item.IsSelected = true; } _rasterImageList.Items.Insert(page - 1, item); } } finally { image.Page = originalImagePageNumber; image.EnableEvents(); } } _rasterImageList.EndUpdate(); }
private void LoadPagesWithVirtualizer(string imageFileName, int pageCount, bool useSVG) { // Load the pages using a virtualizer // Note that the code below will get the width and height for each page indvidually // This is important because some file formats such as PDF, DOCX and TIFF supports pages // with different sizes. // If this behavior is not desired, then the code can be optimized by only obtaining the size // of the first page and re-using it for all items // First thing, we need to add empty items that are the same size as each page for (var pageNumber = 1; pageNumber <= pageCount; pageNumber++) { // This page size in pixels LeadSize pagePixelSize; LeadSizeD resolution; using (var imageInfo = _rasterCodecs.GetInformation(imageFileName, false, pageNumber)) { pagePixelSize = new LeadSize(imageInfo.Width, imageInfo.Height); resolution = new LeadSizeD(imageInfo.XResolution, imageInfo.YResolution); } // Set up the item with the size and resolution var item = new ImageViewerItem { ImageSize = pagePixelSize, Resolution = resolution }; // Add it to the viewer _imageViewer.Items.Add(item); } // All the items are added and ready, create a new virtualizer and use it var virtualizer = new MyImageViewerVirtualizer(imageFileName, _rasterCodecs, useSVG); _imageViewer.Virtualizer = virtualizer; }
private void PostSetPageThumbnail(Workers.ThreadedPageWorkerPageProcessedEventArgs e) { int itemIndex = e.PageNumber - 1; if (itemIndex >= 0 && itemIndex < _rasterImageList.Items.Count) { ImageViewerItem item = _rasterImageList.Items[itemIndex]; RasterImage image = e.Data as RasterImage; if (image == null || e.Error != null) { // Could no be loaded using (Bitmap loadingThumbnailBitmap = global::PDFDocumentDemo.Properties.Resources.ErrorThumbnail) { image = RasterImageConverter.ConvertFromImage(loadingThumbnailBitmap, ConvertFromImageOptions.None); } } item.Image = image; _rasterImageList.Invalidate(true); } }
protected override void DeleteItem(ImageViewerItem item, object data) { // This method is called when the item is no longer used // In this example, we simply dispose the RasterImage/SvgDocument we loaded // Check if it is a raster image var rasterImage = data as RasterImage; if (rasterImage != null) { rasterImage.Dispose(); return; } // Check if it is an SVG document var svgDocument = data as SvgDocument; if (svgDocument != null) { svgDocument.Dispose(); return; } }
private void PopulateAttachments() { // Remove any previous attachments RemoveAllAttachments(); LEADDocument document = _documentViewer.Document; if (document == null || document.Attachments.Count == 0) { return; } // Add new ones int selectedIndex = GetAttachmentSelectedIndexForDocument(document); _attachmentsImageViewer.BeginUpdate(); for (int i = 0; i < document.Attachments.Count; i++) { DocumentAttachment attachment = document.Attachments[i]; var item = new ImageViewerItem(); item.Text = attachment.DisplayName; item.Image = _attachmentImage; item.Tag = attachment; if (selectedIndex == i) { item.IsSelected = true; } _attachmentsImageViewer.Items.Add(item); } _attachmentsImageViewer.EndUpdate(); if (selectedIndex != -1) { _attachmentsImageViewer.EnsureItemVisibleByIndex(selectedIndex); } }
private void FillImageList(RasterImage image) { using (RasterCodecs codecs = new RasterCodecs()) { ImageListControl.Items.Clear(); for (int index = 1; index <= image.PageCount; index++) { image.Page = index; // Create the item of the image list ImageViewerItem item = new ImageViewerItem(); item.Size = LeadSize.Create(120, 120); item.Text = "Page: " + (index - 1).ToString(); item.Image = image.Clone(); item.Tag = index; // Add the item to the image list ImageListControl.Items.Add(item); } ImageListControl.Items[0].IsSelected = true; _viewer.Image = ImageListControl.Items[0].Image; } }
private void _imageViewer_PostRender(object sender, ImageViewerRenderEventArgs e) { // Do we have a rendering engine? var renderingEngine = this.RenderingEngine as Leadtools.Annotations.Rendering.AnnWinFormsRenderingEngine; if (renderingEngine == null) { return; } bool runMode = false; if (_automationObject != null && _automationObject.Manager != null) { runMode = (_automationObject.Manager.UserMode == AnnUserMode.Run); } var context = e.PaintEventArgs.Graphics; var saveSmoothingMode = context.SmoothingMode; try { // Set the anti alias mode if (this.AutomationAntiAlias) { if (context.SmoothingMode != SmoothingMode.AntiAlias) { context.SmoothingMode = SmoothingMode.AntiAlias; } } else { if (context.SmoothingMode != SmoothingMode.Default) { context.SmoothingMode = SmoothingMode.Default; } } // Do we have multiple containers? if (_getContainersCallback != null) { // Yes, get the container for this item var containers = _getContainersCallback(); var clipRect = LeadRectD.Create( e.PaintEventArgs.ClipRectangle.X, e.PaintEventArgs.ClipRectangle.Y, e.PaintEventArgs.ClipRectangle.Width, e.PaintEventArgs.ClipRectangle.Height); if (containers != null) { switch (this.MultiContainerMode) { case AutomationControlMultiContainerMode.MultiPage: // Each container belong to an item for (var index = 0; index < containers.Count; index++) { if (index < _imageViewer.Items.Count) { var itemBounds = _imageViewer.GetItemBounds(_imageViewer.Items[index], ImageViewerItemPart.Item); if (!itemBounds.IsEmpty) { var container = containers[index]; var item = _imageViewer.Items[index]; var containerBounds = _automationObject.GetContainerInvalidRect(container, true); var intersects = !containerBounds.IsEmpty && containerBounds.IntersectsWith(clipRect); if (intersects || !_imageViewer.GetItemViewBounds(item, ImageViewerItemPart.Item, true).IsEmpty) { RenderContainer(e, renderingEngine, container, runMode); } } } } break; case AutomationControlMultiContainerMode.SinglePage: default: // All containers belong to the active item ImageViewerItem activeItem = _imageViewer.ActiveItem; if (activeItem != null && !_imageViewer.GetItemViewBounds(activeItem, ImageViewerItemPart.Item, true).IsEmpty) { for (var index = 0; index < containers.Count; index++) { var itemBounds = _imageViewer.GetItemBounds(activeItem, ImageViewerItemPart.Item); if (!itemBounds.IsEmpty) { var container = containers[index]; var containerBounds = _automationObject.GetContainerInvalidRect(container, true); var intersects = !containerBounds.IsEmpty && containerBounds.IntersectsWith(clipRect); if (intersects) { RenderContainer(e, renderingEngine, container, runMode); } } } } break; } } } else { // Using single-containers, just render the one the user set var container = this._container; if (container != null) { RenderContainer(e, renderingEngine, container, runMode); } } } finally { if (context.SmoothingMode != saveSmoothingMode) { context.SmoothingMode = saveSmoothingMode; } } }
private void _imageViewer_PostRender(object sender, ImageViewerRenderEventArgs e) { // Do we have a rendering engine? var renderingEngine = this.RenderingEngine as AnnDrawRenderingEngine; if (renderingEngine == null) { return; } bool runMode = false; if (_automationObject != null && _automationObject.Manager != null) { runMode = (_automationObject.Manager.UserMode == AnnUserMode.Run); } try { // Do we have multiple containers? if (_getContainersCallback != null) { // Yes, get the container for this item var containers = _getContainersCallback(); if (containers != null) { switch (this.MultiContainerMode) { case AutomationControlMultiContainerMode.MultiPage: // Each container belong to an item for (var index = 0; index < containers.Count; index++) { if (index < _imageViewer.Items.Count) { var itemBounds = _imageViewer.GetItemBounds(_imageViewer.Items[index], ImageViewerItemPart.Item); if (!itemBounds.IsEmpty) { var container = containers[index]; var item = _imageViewer.Items[index]; var containerBounds = _automationObject.GetContainerInvalidRect(container, true); if (!_imageViewer.GetItemViewBounds(item, ImageViewerItemPart.Item, true).IsEmpty) { RenderContainer(e, renderingEngine, container, runMode); } } } } break; case AutomationControlMultiContainerMode.SinglePage: default: // All containers belong to the active item ImageViewerItem activeItem = _imageViewer.ActiveItem; if (activeItem != null && !_imageViewer.GetItemViewBounds(activeItem, ImageViewerItemPart.Item, true).IsEmpty) { for (var index = 0; index < containers.Count; index++) { var itemBounds = _imageViewer.GetItemBounds(activeItem, ImageViewerItemPart.Item); if (!itemBounds.IsEmpty) { var container = containers[index]; RenderContainer(e, renderingEngine, container, runMode); } } } break; } } } else { // Using single-containers, just render the one the user set var container = this._container; if (container != null) { RenderContainer(e, renderingEngine, container, runMode); } } } finally { } }