Example #1
0
        /// <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();
        }
Example #2
0
        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);
            }
        }
Example #4
0
        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;
            }
        }
Example #6
0
        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;
                        }
                    }
                }
            }
        }
Example #7
0
        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
 }
Example #9
0
        /// <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();
        }
Example #10
0
        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();
        }
Example #11
0
        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);
            }
        }
Example #12
0
        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.");
            }
        }
Example #13
0
        /// <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();
        }
Example #14
0
        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;
        }
Example #15
0
        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);
            }
        }
Example #18
0
        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;
            }
        }
Example #19
0
        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
            {
            }
        }