|
|
| version 1.1, 2004/08/01 05:31:31 | version 1.3, 2004/08/04 15:18:26 |
|---|---|
| Line 19 typedef struct { | Line 19 typedef struct { |
| #define PALADDED 32 | #define PALADDED 32 |
| static char bmpext[] = "bmp"; | static const OEMCHAR bmpext[] = OEMTEXT("bmp"); |
| static char bmptitle[] = "Bitmapの保存"; | static const OEMCHAR bmptitle[] = OEMTEXT("Bitmapの保存"); |
| static char *bmpextstr[] = { | static const OEMCHAR *bmpextstr[] = { |
| "2色ビットマップ\0*.bmp\0", | OEMTEXT("2色ビットマップ\0*.bmp\0"), |
| "16色ビットマップ\0*.bmp\0", | OEMTEXT("16色ビットマップ\0*.bmp\0"), |
| "256色ビットマップ\0*.bmp\0", | OEMTEXT("256色ビットマップ\0*.bmp\0"), |
| "フルカラービットマップ\0*.bmp\0"}; | OEMTEXT("フルカラービットマップ\0*.bmp\0")}; |
| static char pathname[MAX_PATH]; | static OEMCHAR pathname[MAX_PATH]; |
| static LPSTR savefileselect(LPSTR filter, LPSTR defname) { | static OEMCHAR *savefileselect(const OEMCHAR *filter, const OEMCHAR *defname) { |
| FILESEL bmpui; | FILESEL bmpui; |
| Line 97 BYTE bmps_appal(int *pals, RGB32 *pal, D | Line 97 BYTE bmps_appal(int *pals, RGB32 *pal, D |
| return((BYTE)ret); | return((BYTE)ret); |
| } | } |
| void bmpsavefile(LPSTR filename, BMP_CTRL *bmc) { | void bmpsavefile(const OEMCHAR *filename, BMP_CTRL *bmc) { |
| FILEH dst; | FILEH dst; |
| DWORD linesize; | DWORD linesize; |
| Line 105 void bmpsavefile(LPSTR filename, BMP_CTR | Line 105 void bmpsavefile(LPSTR filename, BMP_CTR |
| long y; | long y; |
| BYTE *p; | BYTE *p; |
| BYTE bit; | BYTE bit; |
| BYTE work[SCREEN_WIDTH]; | BYTE work[SURFACE_WIDTH]; |
| if (bmc->bmi.biClrImportant <= 2) { | if (bmc->bmi.biClrImportant <= 2) { |
| bmc->bmi.biBitCount = 1; | bmc->bmi.biBitCount = 1; |
| Line 189 void bmpsave(void) { | Line 189 void bmpsave(void) { |
| BYTE c; | BYTE c; |
| int pals = 0; | int pals = 0; |
| long x, y; | long x, y; |
| char *f; | const OEMCHAR *f; |
| LPSTR r; | OEMCHAR *r; |
| if ((hbmc = GlobalAlloc(GPTR, (DWORD)sizeof(BMP_CTRL) + 1 + | if ((hbmc = GlobalAlloc(GPTR, (DWORD)sizeof(BMP_CTRL) + 1 + |
| ((DWORD)SCREEN_WIDTH * SCREEN_HEIGHT * 3L))) == NULL) { | ((DWORD)SURFACE_WIDTH * SURFACE_HEIGHT * 3L))) == NULL) { |
| return; | return; |
| } | } |
| if ((bmc = (BMP_CTRL *)GlobalLock(hbmc)) == NULL) { | if ((bmc = (BMP_CTRL *)GlobalLock(hbmc)) == NULL) { |
| Line 203 void bmpsave(void) { | Line 203 void bmpsave(void) { |
| ZeroMemory(bmc, sizeof(BMP_CTRL)); | ZeroMemory(bmc, sizeof(BMP_CTRL)); |
| ZeroMemory(remap, 256); | ZeroMemory(remap, 256); |
| ZeroMemory(remapflg, 256); | ZeroMemory(remapflg, 256); |
| bmc->bmi.biWidth = SCREEN_WIDTH; | bmc->bmi.biWidth = SURFACE_WIDTH; |
| bmc->bmi.biHeight = SCREEN_HEIGHT; | bmc->bmi.biHeight = SURFACE_HEIGHT; |
| p = screenmap; | p = screenmap; |
| q = (BYTE *)bmc + sizeof(BMP_CTRL); | q = (BYTE *)bmc + sizeof(BMP_CTRL); |
| for (y=0; y<SCREEN_HEIGHT; y++) { | for (y=0; y<SURFACE_HEIGHT; y++) { |
| switch(scrn.widthmode) { | switch(scrn.widthmode) { |
| case SCRNWIDTHMODE_WIDTH80: | case SCRNWIDTHMODE_WIDTH80: |
| default: | default: |
| for (x=0; x<SCREEN_WIDTH; x++) { | for (x=0; x<SURFACE_WIDTH; x++) { |
| c = *p++; | c = *p++; |
| if (!remapflg[c]) { | if (!remapflg[c]) { |
| remapflg[c] = 1; | remapflg[c] = 1; |
| Line 223 void bmpsave(void) { | Line 223 void bmpsave(void) { |
| break; | break; |
| case SCRNWIDTHMODE_WIDTH40: | case SCRNWIDTHMODE_WIDTH40: |
| for (x=0; x<SCREEN_WIDTH/2; x++) { | for (x=0; x<SURFACE_WIDTH/2; x++) { |
| c = *p++; | c = *p++; |
| if (!remapflg[c]) { | if (!remapflg[c]) { |
| remapflg[c] = 1; | remapflg[c] = 1; |
| Line 233 void bmpsave(void) { | Line 233 void bmpsave(void) { |
| *q++ = remap[c]; | *q++ = remap[c]; |
| *q++ = remap[c]; | *q++ = remap[c]; |
| } | } |
| p += SCREEN_WIDTH/2; | p += SURFACE_WIDTH/2; |
| break; | break; |
| case SCRNWIDTHMODE_4096: | case SCRNWIDTHMODE_4096: |
| for (x=0; x<SCREEN_WIDTH/2; x++) { | for (x=0; x<SURFACE_WIDTH/2; x++) { |
| c = bmps_appal(&pals, bmc->pal, | c = bmps_appal(&pals, bmc->pal, |
| x1z_pal32[(p[320] << 8) | p[0]].d); | x1z_pal32[(p[320] << 8) | p[0]].d); |
| p++; | p++; |
| *q++ = c; | *q++ = c; |
| *q++ = c; | *q++ = c; |
| } | } |
| p += SCREEN_WIDTH/2; | p += SURFACE_WIDTH/2; |
| break; | break; |
| } | } |
| if (pals > 256) { | if (pals > 256) { |
| Line 257 void bmpsave(void) { | Line 257 void bmpsave(void) { |
| f = bmpextstr[3]; | f = bmpextstr[3]; |
| p = screenmap; | p = screenmap; |
| q = (BYTE *)bmc + sizeof(BMP_CTRL); | q = (BYTE *)bmc + sizeof(BMP_CTRL); |
| for (y=0; y<SCREEN_HEIGHT; y++) { | for (y=0; y<SURFACE_HEIGHT; y++) { |
| switch(scrn.widthmode) { | switch(scrn.widthmode) { |
| case 0: | case 0: |
| default: | default: |
| for (x=0; x<SCREEN_WIDTH; x++) { | for (x=0; x<SURFACE_WIDTH; x++) { |
| *(DWORD *)q = x1n_pal32[*p++].d; | *(DWORD *)q = x1n_pal32[*p++].d; |
| q += 3; | q += 3; |
| } | } |
| break; | break; |
| case 1: | case 1: |
| for (x=0; x<SCREEN_WIDTH/2; x++) { | for (x=0; x<SURFACE_WIDTH/2; x++) { |
| *(DWORD *)q = x1n_pal32[*p].d; | *(DWORD *)q = x1n_pal32[*p].d; |
| *(DWORD *)(q+3) = x1n_pal32[*p].d; | *(DWORD *)(q+3) = x1n_pal32[*p].d; |
| p++; | p++; |
| q += 6; | q += 6; |
| } | } |
| p += SCREEN_WIDTH/2; | p += SURFACE_WIDTH/2; |
| break; | break; |
| case 2: | case 2: |
| for (x=0; x<SCREEN_WIDTH/2; x++) { | for (x=0; x<SURFACE_WIDTH/2; x++) { |
| *(DWORD *)q = x1z_pal32[(p[320] << 8) | p[0]].d; | *(DWORD *)q = x1z_pal32[(p[320] << 8) | p[0]].d; |
| *(DWORD *)(q+3) = x1z_pal32[(p[320] << 8) | p[0]].d; | *(DWORD *)(q+3) = x1z_pal32[(p[320] << 8) | p[0]].d; |
| p++; | p++; |
| q += 6; | q += 6; |
| } | } |
| p += SCREEN_WIDTH/2; | p += SURFACE_WIDTH/2; |
| break; | break; |
| } | } |
| } | } |
| Line 295 void bmpsave(void) { | Line 295 void bmpsave(void) { |
| else if (pals > 2) { | else if (pals > 2) { |
| f = bmpextstr[1]; | f = bmpextstr[1]; |
| } | } |
| if ((r = savefileselect(f, "X1R_%04d.BMP")) != NULL) { | if ((r = savefileselect(f, OEMTEXT("X1R_%04d.BMP"))) != NULL) { |
| bmpsavefile(r, bmc); | bmpsavefile(r, bmc); |
| } | } |
| GlobalUnlock(hbmc); | GlobalUnlock(hbmc); |
| Line 305 void bmpsave(void) { | Line 305 void bmpsave(void) { |
| void bmpsavehalf(void) { | void bmpsavehalf(void) { |
| HANDLE hbmc; | HANDLE hbmc; |
| BMP_CTRL *bmc; | BMP_CTRL *bmc; |
| BYTE *p, *q; | BYTE *p, *q; |
| int pals = 0; | int pals = 0; |
| long x, y; | long x, y; |
| char *f; | const OEMCHAR *f; |
| LPSTR r; | OEMCHAR *r; |
| if ((hbmc = GlobalAlloc(GPTR, (DWORD)sizeof(BMP_CTRL) + 1 + | if ((hbmc = GlobalAlloc(GPTR, (DWORD)sizeof(BMP_CTRL) + 1 + |
| ((DWORD)SCREEN_WIDTH * SCREEN_HEIGHT * 3L))) == NULL) { | ((DWORD)SURFACE_WIDTH * SURFACE_HEIGHT * 3L))) == NULL) { |
| return; | return; |
| } | } |
| if ((bmc = (BMP_CTRL *)GlobalLock(hbmc)) == NULL) { | if ((bmc = (BMP_CTRL *)GlobalLock(hbmc)) == NULL) { |
| Line 322 void bmpsavehalf(void) { | Line 322 void bmpsavehalf(void) { |
| return; | return; |
| } | } |
| ZeroMemory(bmc, sizeof(BMP_CTRL)); | ZeroMemory(bmc, sizeof(BMP_CTRL)); |
| bmc->bmi.biWidth = SCREEN_WIDTH/2; | bmc->bmi.biWidth = SURFACE_WIDTH/2; |
| bmc->bmi.biHeight = SCREEN_HEIGHT/2; | bmc->bmi.biHeight = SURFACE_HEIGHT/2; |
| p = screenmap; | p = screenmap; |
| q = (BYTE *)bmc + sizeof(BMP_CTRL); | q = (BYTE *)bmc + sizeof(BMP_CTRL); |
| for (y=0; y<SCREEN_HEIGHT/2; y++) { | for (y=0; y<SURFACE_HEIGHT/2; y++) { |
| switch(scrn.widthmode) { | switch(scrn.widthmode) { |
| case SCRNWIDTHMODE_WIDTH80: | case SCRNWIDTHMODE_WIDTH80: |
| default: | default: |
| for (x=0; x<SCREEN_WIDTH/2; x++) { | for (x=0; x<SURFACE_WIDTH/2; x++) { |
| *q++ = bmps_appal(&pals, bmc->pal, palettesmix(p).d); | *q++ = bmps_appal(&pals, bmc->pal, palettesmix(p).d); |
| p += 2; | p += 2; |
| } | } |
| p += SCREEN_WIDTH; | p += SURFACE_WIDTH; |
| break; | break; |
| case SCRNWIDTHMODE_WIDTH40: | case SCRNWIDTHMODE_WIDTH40: |
| for (x=0; x<SCREEN_WIDTH/2; x++) { | for (x=0; x<SURFACE_WIDTH/2; x++) { |
| *q++ = bmps_appal(&pals, bmc->pal, x1n_pal32[*p++].d); | *q++ = bmps_appal(&pals, bmc->pal, x1n_pal32[*p++].d); |
| } | } |
| p += SCREEN_WIDTH + (SCREEN_WIDTH/2); | p += SURFACE_WIDTH + (SURFACE_WIDTH/2); |
| break; | break; |
| case SCRNWIDTHMODE_4096: | case SCRNWIDTHMODE_4096: |
| for (x=0; x<SCREEN_WIDTH/2; x++) { | for (x=0; x<SURFACE_WIDTH/2; x++) { |
| *q++ = bmps_appal(&pals, bmc->pal, | *q++ = bmps_appal(&pals, bmc->pal, |
| x1z_pal32[(p[320] << 8) | p[0]].d); | x1z_pal32[(p[320] << 8) | p[0]].d); |
| p++; | p++; |
| } | } |
| p += SCREEN_WIDTH + (SCREEN_WIDTH/2); | p += SURFACE_WIDTH + (SURFACE_WIDTH/2); |
| break; | break; |
| } | } |
| if (pals > 256) { | if (pals > 256) { |
| Line 363 void bmpsavehalf(void) { | Line 363 void bmpsavehalf(void) { |
| f = bmpextstr[3]; | f = bmpextstr[3]; |
| p = screenmap; | p = screenmap; |
| q = (BYTE *)bmc + sizeof(BMP_CTRL); | q = (BYTE *)bmc + sizeof(BMP_CTRL); |
| for (y=0; y<SCREEN_HEIGHT/2; y++) { | for (y=0; y<SURFACE_HEIGHT/2; y++) { |
| switch(scrn.widthmode) { | switch(scrn.widthmode) { |
| case SCRNWIDTHMODE_WIDTH80: | case SCRNWIDTHMODE_WIDTH80: |
| default: | default: |
| for (x=0; x<SCREEN_WIDTH/2; x++) { | for (x=0; x<SURFACE_WIDTH/2; x++) { |
| *(DWORD *)q = palettesmix(p).d; | *(DWORD *)q = palettesmix(p).d; |
| p += 2; | p += 2; |
| q += 3; | q += 3; |
| } | } |
| p += SCREEN_WIDTH; | p += SURFACE_WIDTH; |
| break; | break; |
| case SCRNWIDTHMODE_WIDTH40: | case SCRNWIDTHMODE_WIDTH40: |
| for (x=0; x<SCREEN_WIDTH/2; x++) { | for (x=0; x<SURFACE_WIDTH/2; x++) { |
| *(DWORD *)q = x1n_pal32[*p++].d; | *(DWORD *)q = x1n_pal32[*p++].d; |
| q += 3; | q += 3; |
| } | } |
| p += SCREEN_WIDTH + (SCREEN_WIDTH/2); | p += SURFACE_WIDTH + (SURFACE_WIDTH/2); |
| break; | break; |
| case SCRNWIDTHMODE_4096: | case SCRNWIDTHMODE_4096: |
| for (x=0; x<SCREEN_WIDTH/2; x++) { | for (x=0; x<SURFACE_WIDTH/2; x++) { |
| *(DWORD *)q = x1z_pal32[(p[320] << 8) | p[0]].d; | *(DWORD *)q = x1z_pal32[(p[320] << 8) | p[0]].d; |
| p++; | p++; |
| q += 3; | q += 3; |
| } | } |
| p += SCREEN_WIDTH + (SCREEN_WIDTH/2); | p += SURFACE_WIDTH + (SURFACE_WIDTH/2); |
| break; | break; |
| } | } |
| } | } |
| Line 400 void bmpsavehalf(void) { | Line 400 void bmpsavehalf(void) { |
| else if (pals > 2) { | else if (pals > 2) { |
| f = bmpextstr[1]; | f = bmpextstr[1]; |
| } | } |
| if ((r = savefileselect(f, "X1RH%04d.BMP")) != NULL) { | if ((r = savefileselect(f, OEMTEXT("X1RH%04d.BMP"))) != NULL) { |
| bmpsavefile(r, bmc); | bmpsavefile(r, bmc); |
| } | } |
| GlobalUnlock(hbmc); | GlobalUnlock(hbmc); |