Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/savebmp.cpp

    r28 r11  
    2424#include "model.h"
    2525
     26#define  __PMPRINTF__
     27#include "PMPRINTF.H"
     28
    2629/* ------------------------------ */
    2730static int StrideOf(const MOD *mod)
    2831{
     32    DebugHereIAm();
    2933        return ( ( mod->gbm.w * mod->gbm.bpp + 31 ) / 32 ) * 4;
    3034        }
     
    3741        if ( (mod->pbData = (UCHAR*) gbmmem_malloc(stride * mod->gbm.h)) == NULL )
    3842            return FALSE;
     43        DebugHereIAm();
    3944        return TRUE;
    4045        }
     
    5459        if ( !AllocateData(modNew) )
    5560            return MOD_ERR_MEM;
     61        DebugHereIAm();
    5662        return MOD_ERR_OK;
    5763        }
     
    7985
    8086        if ( (mrc = ModCreate(w, h, bpp, NULL, modNew)) != MOD_ERR_OK )
    81             return mrc;
    82 
     87                return mrc;
     88        DebugHereIAm();
    8389        memset(&(bm.bmp2), 0, sizeof(bm.bmp2));
    8490        bm.bmp2.cbFix     = sizeof(BITMAPINFOHEADER2);
     
    99105                        }
    100106                }
     107        DebugHereIAm();
    101108        return MOD_ERR_OK;
    102109        }
     
    120127            return grc;
    121128        }
     129        PmpfF(( "file type %i", ft ));
     130        DebugHereIAm();
    122131        gbm_query_filetype(ft, &gbmft);
    123        
     132        PmpfF(( "file type %i name %s flags %i bpp %i", ft, gbmft.short_name,
     133               gbmft.flags, mod->gbm.bpp));
    124134        switch ( mod->gbm.bpp )
    125135                {
     
    133143        if ( (gbmft.flags & flag) == 0 )
    134144            return MOD_ERR_SUPPORT;
    135        
     145        DebugHereIAm();
    136146        if ( (fd = gbm_io_create(szFn, GBM_O_WRONLY)) == -1 )
    137147                return MOD_ERR_CREATE;
    138        
    139         if ( (grc = gbm_write(szFn, fd, ft, &(mod->gbm), mod->gbmrgb,
    140                               mod->pbData, szOpt)) != GBM_ERR_OK )
     148        DebugHereIAm();
     149        if ( (grc = gbm_write(szFn, fd, ft, &(mod->gbm), mod->gbmrgb, mod->pbData, szOpt)) != GBM_ERR_OK )
    141150                {
    142151                gbm_io_close(fd);
     
    144153                return MOD_ERR_GBM(grc);
    145154                }
    146        
     155        DebugHereIAm();
    147156        gbm_io_close(fd);
     157        DebugHereIAm();
    148158        return MOD_ERR_OK;
    149159        }
     
    151161// ** SaveBitmap ********************************************************** /*FOLD00*/
    152162
    153 VOID SaveBitmap (HBITMAP hbm, HPS hps, int width, int height,
    154                  int bitCount, char *title)
     163VOID SaveBitmap (HBITMAP hbm, HPS hps, int width, int height, int bitCount)
    155164{
    156165#ifdef _DOLOGMEM_
     
    163172        PSZ psz = pset->QueryForceSaveFile();
    164173        psz = AddExtensionToFilename( psz );
    165         ModCreateFromHPS( hps, width, height,
    166                          (bitCount > 8 ) ? 24 : bitCount,
    167                          &newmod );
    168         ModWriteToFile(&newmod, psz, "" );
    169        
     174        //
     175        /*if( ( pset->QueryFileFormat() == BMF_12 ) ||
     176           ( pset->QueryFileFormat() == BMF_16 ) ||
     177           ( pset->QueryFileFormat() == BMF_20 ) ) {
     178            SaveBitmapToFile( hbm, psz, hps );
     179            DebugHereIAm();
     180        }
     181        else { */
     182            ModCreateFromHPS( hps, width, height,
     183                             (bitCount > 8 ) ? 24 : bitCount,
     184                             &newmod );
     185            ModWriteToFile(&newmod, psz, "" );
     186        //}
    170187#ifdef _DOLOGMEM_
    171188        LogMem( "SaveBitmap-1", FALSE );
     
    191208        LogDebug( "SaveBitmap()" );
    192209#endif
    193         if (SelectSaveFile (title)) {
     210        if (SelectSaveFile ()) {
    194211#ifdef _DOLOGDEBUG_
    195212            LogDebug( "Before call to SaveBitmapToFile()" );
    196213#endif
    197             ModCreateFromHPS( hps, width, height,
    198                              (bitCount > 8 ) ? 24 : bitCount,
    199                              &newmod );
    200             ModWriteToFile(&newmod, pset->QuerySaveFile (), "" );
    201 
     214            //DebugHereIAm();
     215            /*if( ( pset->QueryFileFormat() == BMF_12 ) ||
     216               ( pset->QueryFileFormat() == BMF_16 ) ||
     217               ( pset->QueryFileFormat() == BMF_20 ) ) {
     218                DebugHereIAm();
     219                SaveBitmapToFile( hbm, pset->QuerySaveFile (), hps );
     220                DebugHereIAm();
     221            }
     222            else {*/
     223                ModCreateFromHPS( hps, width, height,
     224                                 (bitCount > 8 ) ? 24 : bitCount,
     225                                 &newmod );
     226                ModWriteToFile(&newmod, pset->QuerySaveFile (), "" );
     227            //}
    202228#ifdef _DOLOGDEBUG_
    203229            LogDebug( "After call to SaveBitmapToFile()" );
     
    230256
    231257// ** SaveBitmapToFile **************************************************** /*FOLD00*/
    232 #if 0
     258
    233259#define CB_12HEADER       sizeof (BITMAPINFOHEADER) // == 12
    234260#define CB_16HEADER       (sizeof (BITMAPINFOHEADER2)-24)
    235261#define CB_20HEADER       sizeof (BITMAPINFOHEADER2) // == 64
    236262
    237 
     263#if 0
    238264VOID SaveBitmapToFile (HBITMAP hbm, PSZ psz, HPS hps)
    239265{
     
    416442    }
    417443
     444    /*else {
     445#ifdef _DOLOGDEBUG_
     446        LogDebug( "SaveBitmapToFile(): Starting 'else' path." );
     447#endif
     448        PFN xmmioClose = pset->GetMMIO()->pfmmioClose;
     449//        PFN xmmioOpen = pset->GetMMIO()->pfmmioOpen;
     450        PFN xmmioWrite = pset->GetMMIO()->pfmmioWrite;
     451        PFN xmmioQueryHeaderLength = pset->GetMMIO()->pfmmioQueryHeaderLength;
     452        PFN xmmioSetHeader = pset->GetMMIO()->pfmmioSetHeader;
     453
     454#ifdef _DOLOGDEBUG_
     455    LogDebug( "SaveBitmapToFile(): Before GetFOURCC." );
     456#endif
     457        // ********* WRITE TARGET
     458        FOURCC fccTargetIOProc = pset->GetFOURCC();
     459
     460        // Initialize our info MMIOINFO structure.
     461        MMIOINFO mmioinfoTarget;
     462#ifdef _DOLOGDEBUG_
     463    LogDebug( "SaveBitmapToFile(): Before memset." );
     464#endif
     465        memset( &mmioinfoTarget, 0L, sizeof( MMIOINFO ) );
     466        mmioinfoTarget.fccIOProc   = fccTargetIOProc;
     467        mmioinfoTarget.ulTranslate = MMIO_TRANSLATEHEADER | MMIO_TRANSLATEDATA;
     468
     469#ifdef _DOLOGDEBUG_
     470        LogDebug( "SaveBitmapToFile(): Trying to open file." );
     471#endif
     472        // Open target file.
     473        HMMIO hmmioTarget;
     474        if( ! ( hmmioTarget = mmioOpen( psz,
     475                                        &mmioinfoTarget,
     476                                        MMIO_CREATE | MMIO_WRITE |
     477                                        MMIO_DENYWRITE | MMIO_NOIDENTIFY ))) {
     478            DisplayError ("mmioOpen()-Error",
     479                          "mmioOpen()-Error %ld", mmioinfoTarget.ulErrorRet );
     480            return;
     481        }
     482#ifdef _DOLOGDEBUG_
     483        LogDebug( "SaveBitmapToFile(): Open file ok." );
     484#endif
     485
     486        // Set the target header.
     487        ULONG ulImageHeaderLength;
     488
     489        mmioQueryHeaderLength( hmmioTarget, (PLONG)&ulImageHeaderLength, 0L, 0L );
     490        if( ulImageHeaderLength != sizeof( MMIMAGEHEADER ) )
     491        {
     492            // We have a problem.....possibly incompatible versions.
     493            mmioClose( hmmioTarget, 0L );
     494            DisplayError ("mmioQueryHeaderLength()-Error",
     495                          "mmioQueryHeaderLength()-Error",
     496                          WinGetLastError (hab));
     497            return;
     498        }
     499#ifdef _DOLOGDEBUG_
     500        LogDebug( "SaveBitmapToFile(): xmmioQueryHeaderLength ok." );
     501#endif
     502
     503        MMIMAGEHEADER mmImgHdr;
     504        mmImgHdr.ulHeaderLength = ulImageHeaderLength;
     505        mmImgHdr.ulContentType  = MMIO_IMAGE_UNKNOWN;
     506        mmImgHdr.ulMediaType    = MMIO_MEDIATYPE_IMAGE;
     507
     508#ifdef _DOLOGDEBUG_
     509    LogDebug( "SaveBitmapToFile(): Before memcpy (colors)." );
     510#endif
     511        memcpy( mmImgHdr.bmiColors,
     512                PBYTE( &( pbfh2->bmp2 ) ) + sizeof( BITMAPINFOHEADER2 ),
     513                cbColtab );
     514
     515        mmImgHdr.mmXDIBHeader.XDIBHeaderPrefix.ulMemSize = cbBits; // FIXME;
     516        mmImgHdr.mmXDIBHeader.XDIBHeaderPrefix.ulPelFormat = 0; // FIXME;
     517        mmImgHdr.mmXDIBHeader.XDIBHeaderPrefix.usTransType = 0; // FIXME
     518        mmImgHdr.mmXDIBHeader.XDIBHeaderPrefix.ulTransVal = 0;  // FIXME
     519        memcpy( &(mmImgHdr.mmXDIBHeader.BMPInfoHeader2), &bih2, sizeof (BITMAPINFOHEADER2));
     520
     521#ifdef _DOLOGDEBUG_
     522    LogDebug( "SaveBitmapToFile(): Before xmmioSetHeader." );
     523#endif
     524        ULONG ulBytesRead;
     525        if( ( rc = (LONG)mmioSetHeader( hmmioTarget, (MMIMAGEHEADER*)&mmImgHdr,
     526                                         (LONG)sizeof( MMIMAGEHEADER ), (PLONG)&ulBytesRead,
     527                                         0L, 0L ) ) != MMIO_SUCCESS )
     528        {
     529            // Header unavailable.
     530            mmioClose( hmmioTarget, 0L );
     531            DisplayError ("mmioSetHeader()-Error",
     532                          "mmioSetHeader()-Error %ld", rc );
     533            return;
     534        }
     535#ifdef _DOLOGDEBUG_
     536        LogDebug( "SaveBitmapToFile(): xmmioSetHeader ok." );
     537#endif
     538
     539        // write the actual bitmap data bits
     540        if( ( rc = mmioWrite( hmmioTarget, (CHAR *) pb, cbBits ) ) == MMIO_ERROR )
     541            DisplayError ("mmioWrite()-Error",
     542                          "mmioWrite()-Error %ld", rc );
     543#ifdef _DOLOGDEBUG_
     544        LogDebug( "SaveBitmapToFile(): xmmioWrite ok." );
     545#endif
     546
     547        if( ( rc = mmioClose( hmmioTarget, 0 ) ) != MMIO_SUCCESS )
     548            DisplayError ("mmioClose()-Error",
     549                          "mmioClose()-Error %ld", rc );
     550#ifdef _DOLOGDEBUG_
     551        LogDebug( "SaveBitmapToFile(): xmmioClose ok." );
     552#endif
     553    } */
     554
    418555#ifdef _DOLOGDEBUG_
    419556    LogDebug( "SaveBitmapToFile(): Everything done, closed file" );
     
    432569#endif
    433570// ** SetEAs ************************************************************** /*FOLD00*/
    434 #if 0
     571
    435572BOOL SetEAs (PSZ psz)
    436573{
     
    484621    return TRUE;
    485622}
    486 #endif
     623
    487624// ** SelectSaveFile ****************************************************** /*FOLD00*/
    488625
    489 BOOL SelectSaveFile (char *title)
     626BOOL SelectSaveFile (VOID)
    490627{
    491628#ifdef _DOLOGMEM_
     
    496633    {
    497634        CHAR   ach[_MAX_PATH];
    498         for (USHORT i = 0; i < 100; i++)
     635        for (USHORT i = 0; i < 10000; i++)
    499636        {
    500             sprintf( ach, "%s\\%s%02d.%s", pset->QueryNumSaveDir(),
    501                     title, i, pset->GetFileExtension() );
     637            sprintf( ach, "%s\\got%05d.%s", pset->QueryNumSaveDir(), i,
     638                    pset->GetFileExtension() );
    502639            if (access (ach, 0) != 0)
    503640            {
Note: See TracChangeset for help on using the changeset viewer.