Changeset 27 for trunk/savebmp.cpp
- Timestamp:
- Mar 13, 2018, 6:34:46 PM (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/savebmp.cpp
r11 r27 24 24 #include "model.h" 25 25 26 #define __PMPRINTF__27 #include "PMPRINTF.H"28 29 26 /* ------------------------------ */ 30 27 static int StrideOf(const MOD *mod) 31 28 { 32 DebugHereIAm();33 29 return ( ( mod->gbm.w * mod->gbm.bpp + 31 ) / 32 ) * 4; 34 30 } … … 41 37 if ( (mod->pbData = (UCHAR*) gbmmem_malloc(stride * mod->gbm.h)) == NULL ) 42 38 return FALSE; 43 DebugHereIAm();44 39 return TRUE; 45 40 } … … 59 54 if ( !AllocateData(modNew) ) 60 55 return MOD_ERR_MEM; 61 DebugHereIAm();62 56 return MOD_ERR_OK; 63 57 } … … 85 79 86 80 if ( (mrc = ModCreate(w, h, bpp, NULL, modNew)) != MOD_ERR_OK ) 87 88 DebugHereIAm(); 81 return mrc; 82 89 83 memset(&(bm.bmp2), 0, sizeof(bm.bmp2)); 90 84 bm.bmp2.cbFix = sizeof(BITMAPINFOHEADER2); … … 105 99 } 106 100 } 107 DebugHereIAm();108 101 return MOD_ERR_OK; 109 102 } … … 127 120 return grc; 128 121 } 129 PmpfF(( "file type %i", ft ));130 DebugHereIAm();131 122 gbm_query_filetype(ft, &gbmft); 132 PmpfF(( "file type %i name %s flags %i bpp %i", ft, gbmft.short_name, 133 gbmft.flags, mod->gbm.bpp)); 123 134 124 switch ( mod->gbm.bpp ) 135 125 { … … 143 133 if ( (gbmft.flags & flag) == 0 ) 144 134 return MOD_ERR_SUPPORT; 145 DebugHereIAm();135 146 136 if ( (fd = gbm_io_create(szFn, GBM_O_WRONLY)) == -1 ) 147 137 return MOD_ERR_CREATE; 148 DebugHereIAm(); 149 if ( (grc = gbm_write(szFn, fd, ft, &(mod->gbm), mod->gbmrgb, mod->pbData, szOpt)) != GBM_ERR_OK ) 138 139 if ( (grc = gbm_write(szFn, fd, ft, &(mod->gbm), mod->gbmrgb, 140 mod->pbData, szOpt)) != GBM_ERR_OK ) 150 141 { 151 142 gbm_io_close(fd); … … 153 144 return MOD_ERR_GBM(grc); 154 145 } 155 DebugHereIAm();146 156 147 gbm_io_close(fd); 157 DebugHereIAm();158 148 return MOD_ERR_OK; 159 149 } … … 161 151 // ** SaveBitmap ********************************************************** /*FOLD00*/ 162 152 163 VOID SaveBitmap (HBITMAP hbm, HPS hps, int width, int height, int bitCount) 153 VOID SaveBitmap (HBITMAP hbm, HPS hps, int width, int height, 154 int bitCount, char *title) 164 155 { 165 156 #ifdef _DOLOGMEM_ … … 172 163 PSZ psz = pset->QueryForceSaveFile(); 173 164 psz = AddExtensionToFilename( psz ); 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 { */ 165 ModCreateFromHPS( hps, width, height, 166 (bitCount > 8 ) ? 24 : bitCount, 167 &newmod ); 168 ModWriteToFile(&newmod, psz, "" ); 169 170 #ifdef _DOLOGMEM_ 171 LogMem( "SaveBitmap-1", FALSE ); 172 #endif 173 return; 174 } 175 176 if (pset->DoSound ()) 177 { 178 DosBeep ( 500, 100); 179 DosBeep (1000, 100); 180 DosBeep (1500, 100); 181 } 182 183 switch (pset->QuerySaveStyle ()) 184 { 185 case SAVESTYLE_CLIPBOARD: 186 SaveBitmapToClipboard (hbm); 187 break; 188 189 default: 190 #ifdef _DOLOGDEBUG_ 191 LogDebug( "SaveBitmap()" ); 192 #endif 193 if (SelectSaveFile (title)) { 194 #ifdef _DOLOGDEBUG_ 195 LogDebug( "Before call to SaveBitmapToFile()" ); 196 #endif 182 197 ModCreateFromHPS( hps, width, height, 183 198 (bitCount > 8 ) ? 24 : bitCount, 184 199 &newmod ); 185 ModWriteToFile(&newmod, psz, "" ); 186 //} 187 #ifdef _DOLOGMEM_ 188 LogMem( "SaveBitmap-1", FALSE ); 189 #endif 190 return; 191 } 192 193 if (pset->DoSound ()) 194 { 195 DosBeep ( 500, 100); 196 DosBeep (1000, 100); 197 DosBeep (1500, 100); 198 } 199 200 switch (pset->QuerySaveStyle ()) 201 { 202 case SAVESTYLE_CLIPBOARD: 203 SaveBitmapToClipboard (hbm); 204 break; 205 206 default: 207 #ifdef _DOLOGDEBUG_ 208 LogDebug( "SaveBitmap()" ); 209 #endif 210 if (SelectSaveFile ()) { 211 #ifdef _DOLOGDEBUG_ 212 LogDebug( "Before call to SaveBitmapToFile()" ); 213 #endif 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 //} 200 ModWriteToFile(&newmod, pset->QuerySaveFile (), "" ); 201 228 202 #ifdef _DOLOGDEBUG_ 229 203 LogDebug( "After call to SaveBitmapToFile()" ); … … 256 230 257 231 // ** SaveBitmapToFile **************************************************** /*FOLD00*/ 258 232 #if 0 259 233 #define CB_12HEADER sizeof (BITMAPINFOHEADER) // == 12 260 234 #define CB_16HEADER (sizeof (BITMAPINFOHEADER2)-24) 261 235 #define CB_20HEADER sizeof (BITMAPINFOHEADER2) // == 64 262 236 263 #if 0 237 264 238 VOID SaveBitmapToFile (HBITMAP hbm, PSZ psz, HPS hps) 265 239 { … … 442 416 } 443 417 444 /*else {445 #ifdef _DOLOGDEBUG_446 LogDebug( "SaveBitmapToFile(): Starting 'else' path." );447 #endif448 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 #endif457 // ********* WRITE TARGET458 FOURCC fccTargetIOProc = pset->GetFOURCC();459 460 // Initialize our info MMIOINFO structure.461 MMIOINFO mmioinfoTarget;462 #ifdef _DOLOGDEBUG_463 LogDebug( "SaveBitmapToFile(): Before memset." );464 #endif465 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 #endif472 // 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 #endif485 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 #endif502 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 #endif511 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; // FIXME518 mmImgHdr.mmXDIBHeader.XDIBHeaderPrefix.ulTransVal = 0; // FIXME519 memcpy( &(mmImgHdr.mmXDIBHeader.BMPInfoHeader2), &bih2, sizeof (BITMAPINFOHEADER2));520 521 #ifdef _DOLOGDEBUG_522 LogDebug( "SaveBitmapToFile(): Before xmmioSetHeader." );523 #endif524 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 #endif538 539 // write the actual bitmap data bits540 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 #endif546 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 #endif553 } */554 555 418 #ifdef _DOLOGDEBUG_ 556 419 LogDebug( "SaveBitmapToFile(): Everything done, closed file" ); … … 569 432 #endif 570 433 // ** SetEAs ************************************************************** /*FOLD00*/ 571 434 #if 0 572 435 BOOL SetEAs (PSZ psz) 573 436 { … … 621 484 return TRUE; 622 485 } 623 486 #endif 624 487 // ** SelectSaveFile ****************************************************** /*FOLD00*/ 625 488 626 BOOL SelectSaveFile ( VOID)489 BOOL SelectSaveFile (char *title) 627 490 { 628 491 #ifdef _DOLOGMEM_ … … 632 495 if (pset->QueryFileSaveStyle () == FSS_NUMFILES) 633 496 { 497 PmpfF(( " title %s", title)); 634 498 CHAR ach[_MAX_PATH]; 635 for (USHORT i = 0; i < 100 00; i++)499 for (USHORT i = 0; i < 100; i++) 636 500 { 637 sprintf( ach, "%s\\ got%05d.%s", pset->QueryNumSaveDir(), i,638 pset->GetFileExtension() );501 sprintf( ach, "%s\\%s%02d.%s", pset->QueryNumSaveDir(), 502 title, i, pset->GetFileExtension() ); 639 503 if (access (ach, 0) != 0) 640 504 {
Note:
See TracChangeset
for help on using the changeset viewer.