/* 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); }