/* Callback from GS with the rendered thumbnail. Also update progress */ private void ThumbPageCallback(int width, int height, int raster, double zoom_in, int page_num, IntPtr data) { Byte[] bitmap = null; bitmap = new byte[raster * height]; Marshal.Copy(data, bitmap, 0, raster * height); DocPage doc_page = new DocPage(); m_thumbnails.Add(doc_page); doc_page.Content = Page_Content_t.THUMBNAIL; doc_page.Width = width; doc_page.Height = height; doc_page.Zoom = zoom_in; doc_page.PixBuf = new Gdk.Pixbuf(bitmap, Gdk.Colorspace.Rgb, false, 8, width, height, raster); m_GtkimageStoreThumb.AppendValues(doc_page.PixBuf); ThumbAssignMain(page_num, width, height, 1.0); m_GtkimageStoreMain.AppendValues(m_docPages[page_num - 1].PixBuf); m_GtkProgressBar.Fraction = ((double)page_num / ((double)page_num + 1)); return; }
/* Assign current pages to blown up thumbnail images */ private void ThumbAssignMain(int page_num, int width, int height, double zoom_in) { DocPage doc_page = new DocPage(); doc_page.Content = Page_Content_t.THUMBNAIL; doc_page.Zoom = zoom_in; doc_page.Width = (int)(width / (Constants.SCALE_THUMB)); doc_page.Height = (int)(height / (Constants.SCALE_THUMB)); doc_page.PixBuf = m_thumbnails[page_num - 1].PixBuf.ScaleSimple(doc_page.Width, doc_page.Height, Gdk.InterpType.Nearest); doc_page.PageNum = page_num; m_docPages.Add(doc_page); if (page_num == 1) { m_page_scroll_pos.Add(height); } else { m_page_scroll_pos.Add(height + m_page_scroll_pos[page_num - 2]); } }
/* 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 = null; bitmap = new byte[raster * height]; Marshal.Copy(data, bitmap, 0, raster * height); DocPage doc_page = m_docPages[m_current_page]; if (doc_page.Content != Page_Content_t.FULL_RESOLUTION || m_aa_change) { doc_page.Width = width; doc_page.Height = height; doc_page.Content = Page_Content_t.FULL_RESOLUTION; doc_page.Zoom = m_doczoom; doc_page.PixBuf = new Gdk.Pixbuf(bitmap, Gdk.Colorspace.Rgb, false, 8, width, height, raster); m_GtkimageStoreMain.SetValue(m_tree_iter, 0, doc_page.PixBuf); } if (page_num == 1) { m_page_scroll_pos[0] = height; } else { m_page_scroll_pos[page_num - 1] = height + m_page_scroll_pos[page_num - 2]; } m_GtkimageStoreMain.IterNext(ref m_tree_iter); m_current_page += 1; m_GtkProgressBar.Fraction = ((double)page_num / ((double)page_num + 1)); return; }