c# - How to convert a XPS file to an image in high quality (rather than blurry low resolution)? -
i'm trying convert xps wpf.
the idea these images can loaded silverlight 4, using following code:
// xps document xpsdocument xpsdoc = new xpsdocument(xpsfilename, system.io.fileaccess.read); fixeddocumentsequence docseq = xpsdoc.getfixeddocumentsequence(); // number of pages pagecount = docseq.references[0].getdocument(false).pages.count; documentpage sizepage = docseq.documentpaginator.getpage(0); pageheight = sizepage.size.height; pagewidth = sizepage.size.width; // scale dimensions 96 dpi 600 dpi. double scale = 300/ 96; // convert xps page png file (int pagenum = 0; pagenum < pagecount; pagenum++) { documentpage docpage = docseq.documentpaginator.getpage(pagenum); bitmapimage bitmap = new bitmapimage(); rendertargetbitmap rendertarget = new rendertargetbitmap((int)(scale * (docpage.size.height + 1)), (int)(scale * (docpage.size.height + 1)), scale * 96, scale * 96, pixelformats.pbgra32); rendertarget.render(docpage.visual); pngbitmapencoder encoder = new pngbitmapencoder(); encoder.frames.add(bitmapframe.create(rendertarget)); filestream pageoutstream = new filestream(name + ".page" + pagenum + ".png", filemode.create, fileaccess.write); encoder.save(pageoutstream); pageoutstream.close();
this code taken http://xpsreader.codeplex.com/ project convert xps document. works great! problem image low resolution , blurry. researched , found rendertargetbitmap , find on page: http://www.codeproject.com/questions/213737/render-target-bitmap-quality-issues
the issue here have not use hardware rendertargetbitmap rendering.
one solution use directx wpf this, have not found clear example show me right way it.
i appreciate suggestions. in advance.
update:i attached xps document, trying convert image please download test.xps
i saw in post , in many others peoples have problems conversion of documentpage image , saving on hdd. method took pages document viewer , save them on hdd jpg images.
public void savedocumentpagestoimages(idocumentpaginatorsource document, string dirpath) { if (string.isnullorempty(dirpath)) return; if (dirpath[dirpath.length - 1] != '\\') dirpath += "\\"; if (!directory.exists(dirpath)) return; memorystream[] streams = null; try { int pagecount = document.documentpaginator.pagecount; documentpage[] pages = new documentpage[pagecount]; (int = 0; < pagecount; i++) pages[i] = document.documentpaginator.getpage(i); streams = new memorystream[pages.count()]; (int = 0; < pages.count(); i++) { documentpage source = pages[i]; streams[i] = new memorystream(); rendertargetbitmap rendertarget = new rendertargetbitmap((int)source.size.width, (int)source.size.height, 96, // wpf (avalon) units 96dpi based 96, system.windows.media.pixelformats.default); rendertarget.render(source.visual); jpegbitmapencoder encoder = new jpegbitmapencoder(); // choose type here ie: jpegbitmapencoder, etc encoder.qualitylevel = 100; encoder.frames.add(bitmapframe.create(rendertarget)); encoder.save(streams[i]); filestream file = new filestream(dirpath + "page_" + (i+1) + ".jpg", filemode.createnew); file.write(streams[i].getbuffer(), 0, (int)streams[i].length); file.close(); streams[i].position = 0; } } catch (exception e1) { throw e1; } { if (streams != null) { foreach (memorystream stream in streams) { stream.close(); stream.dispose(); } } } }
Comments
Post a Comment