diff options
author | Radek Doulik <rodo@novell.com> | 2010-09-15 11:34:17 +0200 |
---|---|---|
committer | Radek Doulik <rodo@novell.com> | 2010-09-15 17:54:14 +0200 |
commit | 590282f4f078142495858a8cb6385316da0a4a8f (patch) | |
tree | e49b3af98ebebb722d4e871b9f2739126568ba89 /cppcanvas/source | |
parent | f59b7f548242b6079b9af303cc74b672d94e74db (diff) |
emf+-embedded-mf-image.diff: emf+ import - support for embedded MF images
Diffstat (limited to 'cppcanvas/source')
-rw-r--r-- | cppcanvas/source/mtfrenderer/emfplus.cxx | 24 | ||||
-rw-r--r-- | cppcanvas/source/mtfrenderer/implrenderer.cxx | 1 |
2 files changed, 21 insertions, 4 deletions
diff --git a/cppcanvas/source/mtfrenderer/emfplus.cxx b/cppcanvas/source/mtfrenderer/emfplus.cxx index 8d22704ee23f..a82aad0b9c3f 100644 --- a/cppcanvas/source/mtfrenderer/emfplus.cxx +++ b/cppcanvas/source/mtfrenderer/emfplus.cxx @@ -659,12 +659,10 @@ namespace cppcanvas Graphic graphic; - void Read (SvStream &s) + void Read (SvMemoryStream &s) { sal_uInt32 header, unknown; - EMFP_DEBUG (dumpWords(s, 16)); - s >> header >> type; EMFP_DEBUG (printf ("EMF+\timage\nEMF+\theader: 0x%08x type: 0x%08x\n", header, type)); @@ -679,6 +677,24 @@ namespace cppcanvas EMFP_DEBUG (printf ("EMF+\tbitmap width: %d height: %d\n", graphic.GetBitmap ().GetSizePixel ().Width (), graphic.GetBitmap ().GetSizePixel ().Height ())); } + } else if (type == 2) { + sal_Int32 mfType, mfSize; + + s >> mfType >> mfSize; + EMFP_DEBUG (printf ("EMF+\tmetafile type: %d dataSize: %d\n", mfType, mfSize)); + + GraphicFilter filter; + SvMemoryStream mfStream (((char *)s.GetData()) + s.Tell(), mfSize, STREAM_READ); + + filter.ImportGraphic (graphic, String (), mfStream); + + // debug code - write the stream to debug file /tmp/emf-stream.emf + EMFP_DEBUG(mfStream.Seek(0); + SvFileStream file( UniString::CreateFromAscii( "/tmp/emf-embedded-stream.emf" ), STREAM_WRITE | STREAM_TRUNC ); + + mfStream >> file; + file.Flush(); + file.Close()); } } }; @@ -1067,7 +1083,7 @@ namespace cppcanvas mMFlags = flags; mMStream.Seek(0); } - EMFP_DEBUG (dumpWords(rMF, 16)); + // 1st 4 bytes are unknown mMStream.Write (((const char *)rMF.GetData()) + rMF.Tell() + 4, dataSize - 4); EMFP_DEBUG (printf ("EMF+ read next object part size: %d type: %04hx flags: %04hx data size: %d\n", size, type, flags, dataSize)); diff --git a/cppcanvas/source/mtfrenderer/implrenderer.cxx b/cppcanvas/source/mtfrenderer/implrenderer.cxx index 080c7d39740b..af1f20904560 100644 --- a/cppcanvas/source/mtfrenderer/implrenderer.cxx +++ b/cppcanvas/source/mtfrenderer/implrenderer.cxx @@ -1818,6 +1818,7 @@ namespace cppcanvas char *env; if (env = getenv ("EMF_PLUS_LIMIT")) { limit = atoi (env); + EMFP_DEBUG (printf ("EMF+ records limit: %d\n", limit)); } } EMFP_DEBUG (printf ("EMF+ passed to canvas mtf renderer, size: %d\n", pAct->GetDataSize ())); |