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

Popular posts from this blog

c# - SharpSVN - How to get the previous revision? -

c++ - Is it possible to compile a VST on linux? -

url - Querystring manipulation of email Address in PHP -