Changeset 11 for trunk/savebmp.cpp
- Timestamp:
- Feb 21, 2018, 1:01:16 AM (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/savebmp.cpp
r2 r11 20 20 #include <time.h> 21 21 22 // ** SaveBitmap ********************************************************** /*fold00*/ 23 24 VOID SaveBitmap (HBITMAP hbm, HPS hps) 22 #include "gbm\gbm.h" 23 #include "gbm\gbmmem.h" 24 #include "model.h" 25 26 #define __PMPRINTF__ 27 #include "PMPRINTF.H" 28 29 /* ------------------------------ */ 30 static int StrideOf(const MOD *mod) 25 31 { 32 DebugHereIAm(); 33 return ( ( mod->gbm.w * mod->gbm.bpp + 31 ) / 32 ) * 4; 34 } 35 /*...e*/ 36 37 /*...sAllocateData:0:*/ 38 static BOOL AllocateData(MOD *mod) 39 { 40 const unsigned long stride = StrideOf(mod); 41 if ( (mod->pbData = (UCHAR*) gbmmem_malloc(stride * mod->gbm.h)) == NULL ) 42 return FALSE; 43 DebugHereIAm(); 44 return TRUE; 45 } 46 /*...e*/ 47 48 /*...sModCreate:0:*/ 49 MOD_ERR ModCreate( 50 int w, int h, int bpp, const GBMRGB gbmrgb[], 51 MOD *modNew 52 ) 53 { 54 modNew->gbm.w = w; 55 modNew->gbm.h = h; 56 modNew->gbm.bpp = bpp; 57 if ( gbmrgb != NULL && bpp != 24 ) 58 memcpy(&(modNew->gbmrgb), gbmrgb, sizeof(GBMRGB) << bpp); 59 if ( !AllocateData(modNew) ) 60 return MOD_ERR_MEM; 61 DebugHereIAm(); 62 return MOD_ERR_OK; 63 } 64 /*...e*/ 65 66 /*MOD_ERR ModCreateFromHPS( 67 HPS hps, int w, int h, int bpp, //lBitCountScreen > 8 ) ? 24 : lBitCountScreen 68 MOD *modNew 69 )*/ 70 /*...sModCreateFromHPS:0:*/ 71 MOD_ERR ModCreateFromHPS( 72 HPS hps, int w, int h, int bpp, 73 MOD *modNew 74 ) 75 { 76 MOD_ERR mrc; 77 78 #pragma pack(2) 79 struct 80 { 81 BITMAPINFOHEADER2 bmp2; 82 RGB2 argb2Color[0x100]; 83 } bm; 84 #pragma pack() 85 86 if ( (mrc = ModCreate(w, h, bpp, NULL, modNew)) != MOD_ERR_OK ) 87 return mrc; 88 DebugHereIAm(); 89 memset(&(bm.bmp2), 0, sizeof(bm.bmp2)); 90 bm.bmp2.cbFix = sizeof(BITMAPINFOHEADER2); 91 bm.bmp2.cx = w; 92 bm.bmp2.cy = h; 93 bm.bmp2.cBitCount = bpp; 94 bm.bmp2.cPlanes = 1; 95 GpiQueryBitmapBits(hps, 0L, h, modNew->pbData, (BITMAPINFO2 *) &bm); 96 97 if ( bpp != 24 ) 98 { 99 int i; 100 for ( i = 0; i < (1<<bpp); i++ ) 101 { 102 modNew->gbmrgb[i].r = bm.argb2Color[i].bRed ; 103 modNew->gbmrgb[i].g = bm.argb2Color[i].bGreen; 104 modNew->gbmrgb[i].b = bm.argb2Color[i].bBlue ; 105 } 106 } 107 DebugHereIAm(); 108 return MOD_ERR_OK; 109 } 110 /*...e*/ 111 112 /*MOD_ERR ModWriteToFile( 113 const MOD *mod, 114 const CHAR *szFn, const CHAR *szOpt // "" 115 )*/ 116 /*...sModWriteToFile:0:*/ 117 MOD_ERR ModWriteToFile( 118 const MOD *mod, 119 const CHAR *szFn, const CHAR *szOpt 120 ) 121 { 122 GBM_ERR grc; 123 int fd, ft, flag = 0; 124 GBMFT gbmft; 125 126 if ( (grc = gbm_guess_filetype(szFn, &ft)) != GBM_ERR_OK ) { 127 return grc; 128 } 129 PmpfF(( "file type %i", ft )); 130 DebugHereIAm(); 131 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)); 134 switch ( mod->gbm.bpp ) 135 { 136 case 1: flag = GBM_FT_W1; break; 137 case 4: flag = GBM_FT_W4; break; 138 case 8: flag = GBM_FT_W8; break; 139 case 24: flag = GBM_FT_W24; break; 140 default: flag = 0; break; 141 } 142 143 if ( (gbmft.flags & flag) == 0 ) 144 return MOD_ERR_SUPPORT; 145 DebugHereIAm(); 146 if ( (fd = gbm_io_create(szFn, GBM_O_WRONLY)) == -1 ) 147 return MOD_ERR_CREATE; 148 DebugHereIAm(); 149 if ( (grc = gbm_write(szFn, fd, ft, &(mod->gbm), mod->gbmrgb, mod->pbData, szOpt)) != GBM_ERR_OK ) 150 { 151 gbm_io_close(fd); 152 unlink(szFn); 153 return MOD_ERR_GBM(grc); 154 } 155 DebugHereIAm(); 156 gbm_io_close(fd); 157 DebugHereIAm(); 158 return MOD_ERR_OK; 159 } 160 /*...e*/ 161 // ** SaveBitmap ********************************************************** /*FOLD00*/ 162 163 VOID SaveBitmap (HBITMAP hbm, HPS hps, int width, int height, int bitCount) 164 { 26 165 #ifdef _DOLOGMEM_ 27 166 LogMem("SaveBitmap", TRUE); 28 167 #endif 168 MOD newmod; 29 169 30 170 if( pset->QueryFileSaveStyle () == FSS_FORCEFILE ) … … 32 172 PSZ psz = pset->QueryForceSaveFile(); 33 173 psz = AddExtensionToFilename( psz ); 34 SaveBitmapToFile( hbm, psz, hps ); 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 //} 35 187 #ifdef _DOLOGMEM_ 36 188 LogMem( "SaveBitmap-1", FALSE ); … … 60 212 LogDebug( "Before call to SaveBitmapToFile()" ); 61 213 #endif 62 SaveBitmapToFile (hbm, pset->QuerySaveFile (), hps); 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 //} 63 228 #ifdef _DOLOGDEBUG_ 64 229 LogDebug( "After call to SaveBitmapToFile()" ); … … 96 261 #define CB_20HEADER sizeof (BITMAPINFOHEADER2) // == 64 97 262 263 #if 0 98 264 VOID SaveBitmapToFile (HBITMAP hbm, PSZ psz, HPS hps) 99 265 { … … 274 440 fwrite (pb, cbBits, 1, pf); 275 441 fclose (pf); 276 } else { 442 } 443 444 /*else { 277 445 #ifdef _DOLOGDEBUG_ 278 446 LogDebug( "SaveBitmapToFile(): Starting 'else' path." ); … … 304 472 // Open target file. 305 473 HMMIO hmmioTarget; 306 if( ! ( hmmioTarget = pset->GetMMIO()->pfmmioOpen( psz,474 if( ! ( hmmioTarget = mmioOpen( psz, 307 475 &mmioinfoTarget, 308 476 MMIO_CREATE | MMIO_WRITE | 309 MMIO_DENYWRITE | MMIO_NOIDENTIFY ) )) {477 MMIO_DENYWRITE | MMIO_NOIDENTIFY ))) { 310 478 DisplayError ("mmioOpen()-Error", 311 479 "mmioOpen()-Error %ld", mmioinfoTarget.ulErrorRet ); … … 319 487 ULONG ulImageHeaderLength; 320 488 321 xmmioQueryHeaderLength( hmmioTarget, (PLONG)&ulImageHeaderLength, 0L, 0L );489 mmioQueryHeaderLength( hmmioTarget, (PLONG)&ulImageHeaderLength, 0L, 0L ); 322 490 if( ulImageHeaderLength != sizeof( MMIMAGEHEADER ) ) 323 491 { 324 492 // We have a problem.....possibly incompatible versions. 325 xmmioClose( hmmioTarget, 0L );493 mmioClose( hmmioTarget, 0L ); 326 494 DisplayError ("mmioQueryHeaderLength()-Error", 327 495 "mmioQueryHeaderLength()-Error", … … 355 523 #endif 356 524 ULONG ulBytesRead; 357 if( ( rc = (LONG) xmmioSetHeader( hmmioTarget, (MMIMAGEHEADER*)&mmImgHdr,525 if( ( rc = (LONG)mmioSetHeader( hmmioTarget, (MMIMAGEHEADER*)&mmImgHdr, 358 526 (LONG)sizeof( MMIMAGEHEADER ), (PLONG)&ulBytesRead, 359 527 0L, 0L ) ) != MMIO_SUCCESS ) 360 528 { 361 529 // Header unavailable. 362 xmmioClose( hmmioTarget, 0L );530 mmioClose( hmmioTarget, 0L ); 363 531 DisplayError ("mmioSetHeader()-Error", 364 532 "mmioSetHeader()-Error %ld", rc ); … … 370 538 371 539 // write the actual bitmap data bits 372 if( ( rc = xmmioWrite( hmmioTarget,pb, cbBits ) ) == MMIO_ERROR )540 if( ( rc = mmioWrite( hmmioTarget, (CHAR *) pb, cbBits ) ) == MMIO_ERROR ) 373 541 DisplayError ("mmioWrite()-Error", 374 542 "mmioWrite()-Error %ld", rc ); … … 377 545 #endif 378 546 379 if( ( rc = xmmioClose( hmmioTarget, 0 ) ) != MMIO_SUCCESS )547 if( ( rc = mmioClose( hmmioTarget, 0 ) ) != MMIO_SUCCESS ) 380 548 DisplayError ("mmioClose()-Error", 381 549 "mmioClose()-Error %ld", rc ); … … 383 551 LogDebug( "SaveBitmapToFile(): xmmioClose ok." ); 384 552 #endif 385 } 553 } */ 386 554 387 555 #ifdef _DOLOGDEBUG_ … … 399 567 #endif 400 568 } 401 569 #endif 402 570 // ** SetEAs ************************************************************** /*FOLD00*/ 403 571 … … 620 788 } 621 789 622 // ** AddExtensionToFilename ********************************************** /* fold00*/790 // ** AddExtensionToFilename ********************************************** /*FOLD00*/ 623 791 624 792 PSZ AddExtensionToFilename( PSZ psz ) … … 629 797 PSZ pszExtension; 630 798 631 PSZ apszValidExtensions[10] = 632 { "bmp", "tif", "tiff", "tga", "targa", "pcx", "gif", "jpg", "jpeg", "dib" }; 799 PSZ apszValidExtensions[16] = 800 { "bmp", "tif", "tiff", "tga", "targa", "pcx", "pnm", "jpg", "jpeg", 801 "jpg2", "jbg", "jbig", "png", "ppm", "raw", "dib" }; 633 802 634 803 if( ! ( pszExtension = strrchr( psz, '.' ) ) ) { … … 641 810 // Some extension, but not the correct one - change or append. 642 811 BOOL fValidExtension = FALSE; 643 for( int i = 0; i < 1 0; i++ ) {812 for( int i = 0; i < 16; i++ ) { 644 813 if( stricmp( pszExtension+1, apszValidExtensions[i] ) == 0 ) { 645 814 fValidExtension = TRUE;
Note:
See TracChangeset
for help on using the changeset viewer.