diff options
Diffstat (limited to 'svtools/source/filter/jpeg/jpeg.cxx')
-rw-r--r-- | svtools/source/filter/jpeg/jpeg.cxx | 780 |
1 files changed, 0 insertions, 780 deletions
diff --git a/svtools/source/filter/jpeg/jpeg.cxx b/svtools/source/filter/jpeg/jpeg.cxx deleted file mode 100644 index 04e27be98a..0000000000 --- a/svtools/source/filter/jpeg/jpeg.cxx +++ /dev/null @@ -1,780 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_svtools.hxx" - -#include <tools/solar.h> - -extern "C" -{ - #include "stdio.h" - #include "jpeg.h" - #include "jpeglib.h" - #include "jerror.h" -} - -#define _JPEGPRIVATE -#include <vcl/bmpacc.hxx> -#include "jpeg.hxx" -#include <svtools/FilterConfigItem.hxx> -#include <svtools/filter.hxx> - -// ----------- -// - Defines - -// ----------- - -using namespace ::com::sun::star; - -#define JPEGMINREAD 512 - -// ------------- -// - (C-Calls) - -// ------------- - -// ------------------------------------------------------------------------ - -extern "C" void* CreateBitmap( void* pJPEGReader, void* pJPEGCreateBitmapParam ) -{ - return ( (JPEGReader*) pJPEGReader )->CreateBitmap( pJPEGCreateBitmapParam ); -} - -// ------------------------------------------------------------------------ - -extern "C" void* GetScanline( void* pJPEGWriter, long nY ) -{ - return ( (JPEGWriter*) pJPEGWriter )->GetScanline( nY ); -} - -// ------------------------------------------------------------------------ - -struct JPEGCallbackStruct -{ - uno::Reference< task::XStatusIndicator > xStatusIndicator; -}; - -extern "C" long JPEGCallback( void* pCallbackData, long nPercent ) -{ - JPEGCallbackStruct* pS = (JPEGCallbackStruct*)pCallbackData; - if ( pS && pS->xStatusIndicator.is() ) - { - pS->xStatusIndicator->setValue( nPercent ); - } - return 0L; -} - -#define BUF_SIZE 4096 - -typedef struct -{ - struct jpeg_destination_mgr pub; /* public fields */ - - SvStream* outfile; /* target stream */ - JOCTET * buffer; /* start of buffer */ -} my_destination_mgr; - -typedef my_destination_mgr * my_dest_ptr; - -extern "C" void init_destination (j_compress_ptr cinfo) -{ - my_dest_ptr dest = (my_dest_ptr) cinfo->dest; - - /* Allocate the output buffer --- it will be released when done with image */ - dest->buffer = (JOCTET *) - (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, - BUF_SIZE * sizeof(JOCTET)); - - dest->pub.next_output_byte = dest->buffer; - dest->pub.free_in_buffer = BUF_SIZE; -} - -extern "C" boolean empty_output_buffer (j_compress_ptr cinfo) -{ - my_dest_ptr dest = (my_dest_ptr) cinfo->dest; - - if (dest->outfile->Write(dest->buffer, BUF_SIZE) != - (size_t) BUF_SIZE) - ERREXIT(cinfo, JERR_FILE_WRITE); - - dest->pub.next_output_byte = dest->buffer; - dest->pub.free_in_buffer = BUF_SIZE; - - return sal_True; -} - -extern "C" void term_destination (j_compress_ptr cinfo) -{ - my_dest_ptr dest = (my_dest_ptr) cinfo->dest; - size_t datacount = BUF_SIZE - dest->pub.free_in_buffer; - - /* Write any data remaining in the buffer */ - if (datacount > 0) { - if (dest->outfile->Write(dest->buffer, datacount) != datacount) - ERREXIT(cinfo, JERR_FILE_WRITE); - } -} - -extern "C" void jpeg_svstream_dest (j_compress_ptr cinfo, void* out) -{ - SvStream * outfile = (SvStream*)out; - my_dest_ptr dest; - - /* The destination object is made permanent so that multiple JPEG images - * can be written to the same file without re-executing jpeg_svstream_dest. - * This makes it dangerous to use this manager and a different destination - * manager serially with the same JPEG object, because their private object - * sizes may be different. Caveat programmer. - */ - if (cinfo->dest == NULL) { /* first time for this JPEG object? */ - cinfo->dest = (struct jpeg_destination_mgr *) - (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_PERMANENT, - sizeof(my_destination_mgr)); - } - - dest = (my_dest_ptr) cinfo->dest; - dest->pub.init_destination = init_destination; - dest->pub.empty_output_buffer = empty_output_buffer; - dest->pub.term_destination = term_destination; - dest->outfile = outfile; -} - -/* Expanded data source object for stdio input */ - -typedef struct { - struct jpeg_source_mgr pub; /* public fields */ - - SvStream * infile; /* source stream */ - JOCTET * buffer; /* start of buffer */ - boolean start_of_file; /* have we gotten any data yet? */ -} my_source_mgr; - -typedef my_source_mgr * my_src_ptr; - -/* - * Initialize source --- called by jpeg_read_header - * before any data is actually read. - */ - -extern "C" void init_source (j_decompress_ptr cinfo) -{ - my_src_ptr src = (my_src_ptr) cinfo->src; - - /* We reset the empty-input-file flag for each image, - * but we don't clear the input buffer. - * This is correct behavior for reading a series of images from one source. - */ - src->start_of_file = sal_True; -} - -long StreamRead( SvStream* pSvStm, void* pBuffer, long nBufferSize ) -{ - long nRead; - - if( pSvStm->GetError() != ERRCODE_IO_PENDING ) - { - long nActPos = pSvStm->Tell(); - - nRead = (long) pSvStm->Read( pBuffer, nBufferSize ); - - if( pSvStm->GetError() == ERRCODE_IO_PENDING ) - { - nRead = 0; - - // Damit wir wieder an die alte Position - // seeken koennen, setzen wir den Error temp.zurueck - pSvStm->ResetError(); - pSvStm->Seek( nActPos ); - pSvStm->SetError( ERRCODE_IO_PENDING ); - } - } - else - nRead = 0; - - return nRead; -} - -extern "C" boolean fill_input_buffer (j_decompress_ptr cinfo) -{ - my_src_ptr src = (my_src_ptr) cinfo->src; - size_t nbytes; - - nbytes = StreamRead(src->infile, src->buffer, BUF_SIZE); - - if (nbytes <= 0) { - if (src->start_of_file) /* Treat empty input file as fatal error */ - ERREXIT(cinfo, JERR_INPUT_EMPTY); - WARNMS(cinfo, JWRN_JPEG_EOF); - /* Insert a fake EOI marker */ - src->buffer[0] = (JOCTET) 0xFF; - src->buffer[1] = (JOCTET) JPEG_EOI; - nbytes = 2; - } - - src->pub.next_input_byte = src->buffer; - src->pub.bytes_in_buffer = nbytes; - src->start_of_file = sal_False; - - return sal_True; -} - -extern "C" void skip_input_data (j_decompress_ptr cinfo, long num_bytes) -{ - my_src_ptr src = (my_src_ptr) cinfo->src; - - /* Just a dumb implementation for now. Could use fseek() except - * it doesn't work on pipes. Not clear that being smart is worth - * any trouble anyway --- large skips are infrequent. - */ - if (num_bytes > 0) { - while (num_bytes > (long) src->pub.bytes_in_buffer) { - num_bytes -= (long) src->pub.bytes_in_buffer; - (void) fill_input_buffer(cinfo); - /* note we assume that fill_input_buffer will never return sal_False, - * so suspension need not be handled. - */ - } - src->pub.next_input_byte += (size_t) num_bytes; - src->pub.bytes_in_buffer -= (size_t) num_bytes; - } -} - -extern "C" void term_source (j_decompress_ptr) -{ - /* no work necessary here */ -} - -extern "C" void jpeg_svstream_src (j_decompress_ptr cinfo, void * in) -{ - my_src_ptr src; - SvStream * infile = (SvStream*)in; - - /* The source object and input buffer are made permanent so that a series - * of JPEG images can be read from the same file by calling jpeg_stdio_src - * only before the first one. (If we discarded the buffer at the end of - * one image, we'd likely lose the start of the next one.) - * This makes it unsafe to use this manager and a different source - * manager serially with the same JPEG object. Caveat programmer. - */ - if (cinfo->src == NULL) { /* first time for this JPEG object? */ - cinfo->src = (struct jpeg_source_mgr *) - (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_PERMANENT, - sizeof(my_source_mgr)); - src = (my_src_ptr) cinfo->src; - src->buffer = (JOCTET *) - (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_PERMANENT, - BUF_SIZE * sizeof(JOCTET)); - } - - src = (my_src_ptr) cinfo->src; - src->pub.init_source = init_source; - src->pub.fill_input_buffer = fill_input_buffer; - src->pub.skip_input_data = skip_input_data; - src->pub.resync_to_restart = jpeg_resync_to_restart; /* use default method */ - src->pub.term_source = term_source; - src->infile = infile; - src->pub.bytes_in_buffer = 0; /* forces fill_input_buffer on first read */ - src->pub.next_input_byte = NULL; /* until buffer loaded */ -} - -// -------------- -// - JPEGReader - -// -------------- - -JPEGReader::JPEGReader( SvStream& rStm, void* /*pCallData*/, sal_Bool bSetLS ) : - rIStm ( rStm ), - pAcc ( NULL ), - pAcc1 ( NULL ), - pBuffer ( NULL ), - nLastPos ( rStm.Tell() ), - nLastLines ( 0 ), - bSetLogSize ( bSetLS ) -{ - maUpperName = String::CreateFromAscii( "SVIJPEG", 7 ); - nFormerPos = nLastPos; -} - -// ------------------------------------------------------------------------ - -JPEGReader::~JPEGReader() -{ - if( pBuffer ) - rtl_freeMemory( pBuffer ); - - if( pAcc ) - aBmp.ReleaseAccess( pAcc ); - - if( pAcc1 ) - aBmp1.ReleaseAccess( pAcc1 ); -} - -// ------------------------------------------------------------------------ - -void* JPEGReader::CreateBitmap( void* pParam ) -{ - Size aSize( ((JPEGCreateBitmapParam*)pParam)->nWidth, - ((JPEGCreateBitmapParam*)pParam)->nHeight ); - sal_Bool bGray = ((JPEGCreateBitmapParam*)pParam)->bGray != 0; - - void* pBmpBuf = NULL; - - if( pAcc ) - aBmp.ReleaseAccess( pAcc ); - - if( bGray ) - { - BitmapPalette aGrayPal( 256 ); - - for( sal_uInt16 n = 0; n < 256; n++ ) - { - const sal_uInt8 cGray = (sal_uInt8) n; - aGrayPal[ n ] = BitmapColor( cGray, cGray, cGray ); - } - - aBmp = Bitmap( aSize, 8, &aGrayPal ); - } - else - aBmp = Bitmap( aSize, 24 ); - - if ( bSetLogSize ) - { - unsigned long nUnit = ((JPEGCreateBitmapParam*)pParam)->density_unit; - - if( ( ( 1 == nUnit ) || ( 2 == nUnit ) ) && - ( (JPEGCreateBitmapParam*) pParam )->X_density && - ( (JPEGCreateBitmapParam*) pParam )->Y_density ) - { - Point aEmptyPoint; - Fraction aFractX( 1, ((JPEGCreateBitmapParam*)pParam)->X_density ); - Fraction aFractY( 1, ((JPEGCreateBitmapParam*)pParam)->Y_density ); - MapMode aMapMode( nUnit == 1 ? MAP_INCH : MAP_CM, aEmptyPoint, aFractX, aFractY ); - Size aPrefSize = OutputDevice::LogicToLogic( aSize, aMapMode, MAP_100TH_MM ); - - aBmp.SetPrefSize( aPrefSize ); - aBmp.SetPrefMapMode( MapMode( MAP_100TH_MM ) ); - } - } - - pAcc = aBmp.AcquireWriteAccess(); - - if( pAcc ) - { - long nAlignedWidth; - - const sal_uLong nFormat = pAcc->GetScanlineFormat(); - - if( - ( bGray && ( BMP_FORMAT_8BIT_PAL == nFormat ) ) || - ( !bGray && ( BMP_FORMAT_24BIT_TC_RGB == nFormat ) ) - ) - { - pBmpBuf = pAcc->GetBuffer(); - nAlignedWidth = pAcc->GetScanlineSize(); - ((JPEGCreateBitmapParam*)pParam)->bTopDown = pAcc->IsTopDown(); - } - else - { - nAlignedWidth = AlignedWidth4Bytes( aSize.Width() * ( bGray ? 8 : 24 ) ); - ((JPEGCreateBitmapParam*)pParam)->bTopDown = sal_True; - pBmpBuf = pBuffer = rtl_allocateMemory( nAlignedWidth * aSize.Height() ); - } - ((JPEGCreateBitmapParam*)pParam)->nAlignedWidth = nAlignedWidth; - } - - return pBmpBuf; -} - -// ------------------------------------------------------------------------ - -void JPEGReader::FillBitmap() -{ - if( pBuffer && pAcc ) - { - HPBYTE pTmp; - BitmapColor aColor; - long nAlignedWidth; - long nWidth = pAcc->Width(); - long nHeight = pAcc->Height(); - - if( pAcc->GetBitCount() == 8 ) - { - BitmapColor* pCols = new BitmapColor[ 256 ]; - - for( sal_uInt16 n = 0; n < 256; n++ ) - { - const sal_uInt8 cGray = (sal_uInt8) n; - pCols[ n ] = pAcc->GetBestMatchingColor( BitmapColor( cGray, cGray, cGray ) ); - } - - nAlignedWidth = AlignedWidth4Bytes( pAcc->Width() * 8L ); - - for( long nY = 0L; nY < nHeight; nY++ ) - { - pTmp = (sal_uInt8*) pBuffer + nY * nAlignedWidth; - - for( long nX = 0L; nX < nWidth; nX++ ) - pAcc->SetPixel( nY, nX, pCols[ *pTmp++ ] ); - } - - delete[] pCols; - } - else - { - nAlignedWidth = AlignedWidth4Bytes( pAcc->Width() * 24L ); - - for( long nY = 0L; nY < nHeight; nY++ ) - { - pTmp = (sal_uInt8*) pBuffer + nY * nAlignedWidth; - - for( long nX = 0L; nX < nWidth; nX++ ) - { - aColor.SetRed( *pTmp++ ); - aColor.SetGreen( *pTmp++ ); - aColor.SetBlue( *pTmp++ ); - pAcc->SetPixel( nY, nX, aColor ); - } - } - } - } -} - -// ------------------------------------------------------------------------ - -Graphic JPEGReader::CreateIntermediateGraphic( const Bitmap& rBitmap, long nLines ) -{ - Graphic aGraphic; - const Size aSizePix( rBitmap.GetSizePixel() ); - - if( !nLastLines ) - { - if( pAcc1 ) - aBmp1.ReleaseAccess( pAcc1 ); - - aBmp1 = Bitmap( rBitmap.GetSizePixel(), 1 ); - aBmp1.Erase( Color( COL_WHITE ) ); - pAcc1 = aBmp1.AcquireWriteAccess(); - } - - if( nLines && ( nLines < aSizePix.Height() ) ) - { - if( pAcc1 ) - { - const long nNewLines = nLines - nLastLines; - - if( nNewLines ) - { - pAcc1->SetFillColor( Color( COL_BLACK ) ); - pAcc1->FillRect( Rectangle( Point( 0, nLastLines ), - Size( pAcc1->Width(), nNewLines ) ) ); - } - - aBmp1.ReleaseAccess( pAcc1 ); - aGraphic = BitmapEx( rBitmap, aBmp1 ); - pAcc1 = aBmp1.AcquireWriteAccess(); - } - else - aGraphic = rBitmap; - } - else - aGraphic = rBitmap; - - nLastLines = nLines; - - return aGraphic; -} - -// ------------------------------------------------------------------------ - -ReadState JPEGReader::Read( Graphic& rGraphic ) -{ - long nEndPos; - long nLines; - ReadState eReadState; - sal_Bool bRet = sal_False; - sal_uInt8 cDummy; - -#if 1 // TODO: is it possible to get rid of this seek to the end? - // check if the stream's end is already available - rIStm.Seek( STREAM_SEEK_TO_END ); - rIStm >> cDummy; - nEndPos = rIStm.Tell(); - - // else check if at least JPEGMINREAD bytes can be read - if( rIStm.GetError() == ERRCODE_IO_PENDING ) - { - rIStm.ResetError(); - if( ( nEndPos - nFormerPos ) < JPEGMINREAD ) - { - rIStm.Seek( nLastPos ); - return JPEGREAD_NEED_MORE; - } - } - - // seek back to the original position - rIStm.Seek( nLastPos ); -#endif - - Size aPreviewSize = GetPreviewSize(); - SetJpegPreviewSizeHint( aPreviewSize.Width(), aPreviewSize.Height() ); - - // read the (partial) image - ReadJPEG( this, &rIStm, &nLines ); - - if( pAcc ) - { - if( pBuffer ) - { - FillBitmap(); - rtl_freeMemory( pBuffer ); - pBuffer = NULL; - } - - aBmp.ReleaseAccess( pAcc ); - pAcc = NULL; - - if( rIStm.GetError() == ERRCODE_IO_PENDING ) - rGraphic = CreateIntermediateGraphic( aBmp, nLines ); - else - rGraphic = aBmp; - - bRet = sal_True; - } - else if( rIStm.GetError() == ERRCODE_IO_PENDING ) - bRet = sal_True; - - // Status setzen ( Pending hat immer Vorrang ) - if( rIStm.GetError() == ERRCODE_IO_PENDING ) - { - eReadState = JPEGREAD_NEED_MORE; - rIStm.ResetError(); - nFormerPos = rIStm.Tell(); - } - else - { - if( bRet ) - eReadState = JPEGREAD_OK; - else - eReadState = JPEGREAD_ERROR; - } - - return eReadState; -} - - -// -------------- -// - JPEGWriter - -// -------------- - -JPEGWriter::JPEGWriter( SvStream& rStm, const uno::Sequence< beans::PropertyValue >* pFilterData, bool* pExportWasGrey ) : - rOStm ( rStm ), - pAcc ( NULL ), - pBuffer ( NULL ), - pExpWasGrey ( pExportWasGrey ) -{ - FilterConfigItem aConfigItem( (uno::Sequence< beans::PropertyValue >*)pFilterData ); - bGreys = aConfigItem.ReadInt32( String( RTL_CONSTASCII_USTRINGPARAM( "ColorMode" ) ), 0 ) != 0; - nQuality = aConfigItem.ReadInt32( String( RTL_CONSTASCII_USTRINGPARAM( "Quality" ) ), 75 ); - - if ( pFilterData ) - { - int nArgs = pFilterData->getLength(); - const beans::PropertyValue* pValues = pFilterData->getConstArray(); - while( nArgs-- ) - { - if( pValues->Name.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "StatusIndicator" ) ) ) - { - pValues->Value >>= xStatusIndicator; - } - pValues++; - } - } -} - -// ------------------------------------------------------------------------ - -void* JPEGWriter::GetScanline( long nY ) -{ - void* pScanline = NULL; - - if( pAcc ) - { - if( bNative ) - pScanline = pAcc->GetScanline( nY ); - else if( pBuffer ) - { - BitmapColor aColor; - long nWidth = pAcc->Width(); - sal_uInt8* pTmp = pBuffer; - - if( pAcc->HasPalette() ) - { - for( long nX = 0L; nX < nWidth; nX++ ) - { - aColor = pAcc->GetPaletteColor( (sal_uInt8) pAcc->GetPixel( nY, nX ) ); - *pTmp++ = aColor.GetRed(); - if ( bGreys ) - continue; - *pTmp++ = aColor.GetGreen(); - *pTmp++ = aColor.GetBlue(); - } - } - else - { - for( long nX = 0L; nX < nWidth; nX++ ) - { - aColor = pAcc->GetPixel( nY, nX ); - *pTmp++ = aColor.GetRed(); - if ( bGreys ) - continue; - *pTmp++ = aColor.GetGreen(); - *pTmp++ = aColor.GetBlue(); - } - } - - pScanline = pBuffer; - } - } - - return pScanline; -} - -// ------------------------------------------------------------------------ - -sal_Bool JPEGWriter::Write( const Graphic& rGraphic ) -{ - sal_Bool bRet = sal_False; - - if ( xStatusIndicator.is() ) - { - rtl::OUString aMsg; - xStatusIndicator->start( aMsg, 100 ); - } - - Bitmap aGraphicBmp( rGraphic.GetBitmap() ); - - if ( bGreys ) - { - if ( !aGraphicBmp.Convert( BMP_CONVERSION_8BIT_GREYS ) ) - aGraphicBmp = rGraphic.GetBitmap(); - } - - pAcc = aGraphicBmp.AcquireReadAccess(); - - if ( !bGreys ) // bitmap was not explicitely converted into greyscale, - { // check if source is greyscale only - - sal_Bool bIsGrey = sal_True; - - long nWidth = pAcc->Width(); - for ( long nY = 0; bIsGrey && ( nY < pAcc->Height() ); nY++ ) - { - BitmapColor aColor; - for( long nX = 0L; bIsGrey && ( nX < nWidth ); nX++ ) - { - aColor = pAcc->HasPalette() ? pAcc->GetPaletteColor( (sal_uInt8) pAcc->GetPixel( nY, nX ) ) - : pAcc->GetPixel( nY, nX ); - bIsGrey = ( aColor.GetRed() == aColor.GetGreen() ) && ( aColor.GetRed() == aColor.GetBlue() ); - } - } - if ( bIsGrey ) - bGreys = sal_True; - } - - if( pExpWasGrey ) - *pExpWasGrey = bGreys; - - if( pAcc ) - { - bNative = ( pAcc->GetScanlineFormat() == BMP_FORMAT_24BIT_TC_RGB ); - - if( !bNative ) - pBuffer = new sal_uInt8[ AlignedWidth4Bytes( bGreys ? pAcc->Width() * 8L : pAcc->Width() * 24L ) ]; - - JPEGCallbackStruct aCallbackData; - aCallbackData.xStatusIndicator = xStatusIndicator; - bRet = (sal_Bool) WriteJPEG( this, &rOStm, pAcc->Width(), pAcc->Height(), bGreys, nQuality, &aCallbackData ); - - delete[] pBuffer; - pBuffer = NULL; - - aGraphicBmp.ReleaseAccess( pAcc ); - pAcc = NULL; - } - if ( xStatusIndicator.is() ) - xStatusIndicator->end(); - - return bRet; -} - -// -------------- -// - ImportJPEG - -// -------------- - -sal_Bool ImportJPEG( SvStream& rStm, Graphic& rGraphic, void* pCallerData, sal_Int32 nImportFlags ) -{ - JPEGReader* pJPEGReader = (JPEGReader*) rGraphic.GetContext(); - ReadState eReadState; - sal_Bool bRet = sal_True; - - if( !pJPEGReader ) - pJPEGReader = new JPEGReader( rStm, pCallerData, ( nImportFlags & GRFILTER_I_FLAGS_SET_LOGSIZE_FOR_JPEG ) != 0 ); - - if( nImportFlags & GRFILTER_I_FLAGS_FOR_PREVIEW ) - pJPEGReader->SetPreviewSize( Size(128,128) ); - else - pJPEGReader->DisablePreviewMode(); - - rGraphic.SetContext( NULL ); - eReadState = pJPEGReader->Read( rGraphic ); - - if( eReadState == JPEGREAD_ERROR ) - { - bRet = sal_False; - delete pJPEGReader; - } - else if( eReadState == JPEGREAD_OK ) - delete pJPEGReader; - else - rGraphic.SetContext( pJPEGReader ); - - return bRet; -} - -// -------------- -// - ExportJPEG - -// -------------- - -sal_Bool ExportJPEG( SvStream& rOStm, const Graphic& rGraphic, - const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue >* pFilterData, - bool* pExportWasGrey - ) -{ - JPEGWriter aJPEGWriter( rOStm, pFilterData, pExportWasGrey ); - return aJPEGWriter.Write( rGraphic ); -} - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |