Beispiel #1
0
        /* Callback from ghostscript with the rendered image. */
        private void MainPageCallback(int width, int height, int raster, double zoom_in,
                                      int page_num, IntPtr data)
        {
            Byte[]  bitmap     = new byte[raster * height];
            idata_t image_data = new idata_t();

            Marshal.Copy(data, bitmap, 0, raster * height);

            image_data.bitmap   = bitmap;
            image_data.page_num = page_num;
            image_data.width    = width;
            image_data.height   = height;
            image_data.raster   = raster;
            image_data.zoom     = zoom_in;
            m_images_rendered.Add(image_data);

            /* Get the 1.0 page scalings */
            if (m_firstime)
            {
                pagesizes_t page_size = new pagesizes_t();
                page_size.size.X = width;
                page_size.size.Y = height;
                m_page_sizes.Add(page_size);
            }

            /* Dispatch progress bar update on UI thread */
            System.Windows.Application.Current.Dispatcher.BeginInvoke(System.Windows.Threading.DispatcherPriority.Send, new Action(() =>
            {
                m_page_progress_count    += 1;
                xaml_RenderProgress.Value = ((double)m_page_progress_count / (double)m_numpages) * 100.0;
            }));
        }
        /* Assign current pages to blown up thumbnail images */
        private void ThumbAssignMain(int page_num, int width, int height, double zoom_in, ref int offset)
        {
            m_pageType.Add(Page_Content_t.THUMBNAIL);
            DocPage doc_page = new DocPage();

            doc_page.Content = Page_Content_t.THUMBNAIL;
            doc_page.Zoom    = zoom_in;
            doc_page.AA      = m_aa;
            doc_page.BitMap  = m_thumbnails[page_num - 1].BitMap;
            doc_page.Width   = (int)(width / (Constants.SCALE_THUMB));
            doc_page.Height  = (int)(height / (Constants.SCALE_THUMB));
            doc_page.PageNum = page_num;
            m_docPages.Add(doc_page);

            /* Set the page offsets.  Used for determining which pages
             * will be visible within viewport. */
            m_toppage_pos.Add(offset + Constants.PAGE_VERT_MARGIN);
            offset += doc_page.Height + 2 * Constants.PAGE_VERT_MARGIN;

            /* Set page sizes for 1.0 scaling. This is used to quick
             * rescale of pages prior to rendering at new zoom. */
            pagesizes_t page_size = new pagesizes_t();

            page_size.size.X = doc_page.Width;
            page_size.size.Y = doc_page.Height;
            m_page_sizes.Add(page_size);
        }