Changes in trunk/savebmp.cpp [28:11]
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/savebmp.cpp
r28 r11 24 24 #include "model.h" 25 25 26 #define __PMPRINTF__ 27 #include "PMPRINTF.H" 28 26 29 /* ------------------------------ */ 27 30 static int StrideOf(const MOD *mod) 28 31 { 32 DebugHereIAm(); 29 33 return ( ( mod->gbm.w * mod->gbm.bpp + 31 ) / 32 ) * 4; 30 34 } … … 37 41 if ( (mod->pbData = (UCHAR*) gbmmem_malloc(stride * mod->gbm.h)) == NULL ) 38 42 return FALSE; 43 DebugHereIAm(); 39 44 return TRUE; 40 45 } … … 54 59 if ( !AllocateData(modNew) ) 55 60 return MOD_ERR_MEM; 61 DebugHereIAm(); 56 62 return MOD_ERR_OK; 57 63 } … … 79 85 80 86 if ( (mrc = ModCreate(w, h, bpp, NULL, modNew)) != MOD_ERR_OK ) 81 82 87 return mrc; 88 DebugHereIAm(); 83 89 memset(&(bm.bmp2), 0, sizeof(bm.bmp2)); 84 90 bm.bmp2.cbFix = sizeof(BITMAPINFOHEADER2); … … 99 105 } 100 106 } 107 DebugHereIAm(); 101 108 return MOD_ERR_OK; 102 109 } … … 120 127 return grc; 121 128 } 129 PmpfF(( "file type %i", ft )); 130 DebugHereIAm(); 122 131 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)); 124 134 switch ( mod->gbm.bpp ) 125 135 { … … 133 143 if ( (gbmft.flags & flag) == 0 ) 134 144 return MOD_ERR_SUPPORT; 135 145 DebugHereIAm(); 136 146 if ( (fd = gbm_io_create(szFn, GBM_O_WRONLY)) == -1 ) 137 147 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 ) 141 150 { 142 151 gbm_io_close(fd); … … 144 153 return MOD_ERR_GBM(grc); 145 154 } 146 155 DebugHereIAm(); 147 156 gbm_io_close(fd); 157 DebugHereIAm(); 148 158 return MOD_ERR_OK; 149 159 } … … 151 161 // ** SaveBitmap ********************************************************** /*FOLD00*/ 152 162 153 VOID SaveBitmap (HBITMAP hbm, HPS hps, int width, int height, 154 int bitCount, char *title) 163 VOID SaveBitmap (HBITMAP hbm, HPS hps, int width, int height, int bitCount) 155 164 { 156 165 #ifdef _DOLOGMEM_ … … 163 172 PSZ psz = pset->QueryForceSaveFile(); 164 173 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 //} 170 187 #ifdef _DOLOGMEM_ 171 188 LogMem( "SaveBitmap-1", FALSE ); … … 191 208 LogDebug( "SaveBitmap()" ); 192 209 #endif 193 if (SelectSaveFile ( title)) {210 if (SelectSaveFile ()) { 194 211 #ifdef _DOLOGDEBUG_ 195 212 LogDebug( "Before call to SaveBitmapToFile()" ); 196 213 #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 //} 202 228 #ifdef _DOLOGDEBUG_ 203 229 LogDebug( "After call to SaveBitmapToFile()" ); … … 230 256 231 257 // ** SaveBitmapToFile **************************************************** /*FOLD00*/ 232 #if 0 258 233 259 #define CB_12HEADER sizeof (BITMAPINFOHEADER) // == 12 234 260 #define CB_16HEADER (sizeof (BITMAPINFOHEADER2)-24) 235 261 #define CB_20HEADER sizeof (BITMAPINFOHEADER2) // == 64 236 262 237 263 #if 0 238 264 VOID SaveBitmapToFile (HBITMAP hbm, PSZ psz, HPS hps) 239 265 { … … 416 442 } 417 443 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 418 555 #ifdef _DOLOGDEBUG_ 419 556 LogDebug( "SaveBitmapToFile(): Everything done, closed file" ); … … 432 569 #endif 433 570 // ** SetEAs ************************************************************** /*FOLD00*/ 434 #if 0 571 435 572 BOOL SetEAs (PSZ psz) 436 573 { … … 484 621 return TRUE; 485 622 } 486 #endif 623 487 624 // ** SelectSaveFile ****************************************************** /*FOLD00*/ 488 625 489 BOOL SelectSaveFile ( char *title)626 BOOL SelectSaveFile (VOID) 490 627 { 491 628 #ifdef _DOLOGMEM_ … … 496 633 { 497 634 CHAR ach[_MAX_PATH]; 498 for (USHORT i = 0; i < 100 ; i++)635 for (USHORT i = 0; i < 10000; i++) 499 636 { 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() ); 502 639 if (access (ach, 0) != 0) 503 640 {
Note:
See TracChangeset
for help on using the changeset viewer.