📄 mga_zmg.c
字号:
/* (c) HelDoRe Zmg unit ... v0.0.5*/ #define VERZMG " unit v0.0.5"#include <stdio.h>#include "../mga_view.h"#include <zlib.h>void help_zmg(){#ifdef USE_ZMGprintf("ZMG%s\n * + color\n * + color compressed\n * + grayscale\n * + grayscale compressed\n",VERZMG);#endif}int detect_zmg(){#ifdef USE_ZMG char ZMsyg[]="zMG"; int wer; Byte buf[1025*650]; uLong sinput,soutput,stemp; for (tempi=0;tempi<3;tempi++) { if ((char)fgetc(plik) != ZMsyg[tempi]) return 1;} wer=fgetc(plik)-48; image_x=fgetc16(plik); image_y=fgetc16(plik); if (check_image(image_x,image_y,24)==3) return 3; printf("ZMG%s\n",VERZMG); printf("ZMG v%i detected : %ix%i ",wer,image_x,image_y); if (wer==1) { YU12=1; printf("uncompressed color"); for (tempi=0;tempi<image_x*image_y;tempi++) y_image[tempi]=fgetc(plik); for (tempi=0;tempi<image_x*image_y/4;tempi++) cr_image[tempi]=fgetc(plik); for (tempi=0;tempi<image_x*image_y/4;tempi++) cb_image[tempi]=fgetc(plik); } if (wer==2) { YU12=1; printf("compressed color"); sinput=fgetc(plik)*256*256+fgetc(plik)*256+fgetc(plik); soutput=(1025*650); for (tempi=0;tempi<sinput;tempi++) buf[tempi]=fgetc(plik); stemp=uncompress(y_image,&soutput,buf,sinput); sinput=fgetc(plik)*256*256+fgetc(plik)*256+fgetc(plik); soutput=(1025*650); for (tempi=0;tempi<sinput;tempi++) buf[tempi]=fgetc(plik); stemp=uncompress(cr_image,&soutput,buf,sinput); sinput=fgetc(plik)*256*256+fgetc(plik)*256+fgetc(plik); soutput=(1025*650); for (tempi=0;tempi<sinput;tempi++) buf[tempi]=fgetc(plik); stemp=uncompress(cb_image,&soutput,buf,sinput); } if (wer==3) { YU12=1; printf("uncompressed grayscale"); for (tempi=0;tempi<image_x*image_y;tempi++) y_image[tempi]=fgetc(plik); for (x=0;x<(image_x*image_y)/4;x++) { cb_image[x]=-127; cr_image[x]=-127; } } if (wer==4) { YU12=1; printf("compressed grayscale"); sinput=fgetc(plik)*256*256+fgetc(plik)*256+fgetc(plik); soutput=(1025*650); for (tempi=0;tempi<sinput;tempi++) buf[tempi]=fgetc(plik); stemp=uncompress(y_image,&soutput,buf,sinput); for (x=0;x<(image_x*image_y)/4;x++) { cb_image[x]=-127; cr_image[x]=-127; }} printf("\n"); if ((wer != 1) && (wer != 2) && (wer != 3) && (wer != 4)) { printf("v%i not supported yet!\n",wer); return 2; } return 0;#else return 1;#endif}int save_zmg(int vwrite){#ifdef USE_ZMG char ZMGsyg[]="zMG"; FILE *zapis; char nazwa[100]; int img_x,img_y; Byte buf[1025*650]; uLong sinput,soutput,stemp; vwrite+=48; img_x=image_x; img_y=image_y; tempi=0; do { nazwa[tempi]=mee[tempi]; tempi++; } while ((mee[tempi] != 46) && (tempi!=strlen(mee))); nazwa[tempi++]=46; nazwa[tempi++]=122; nazwa[tempi++]=109; nazwa[tempi++]=103; nazwa[tempi++]=0; printf("ZMG%s : Saving to ",VERZMG); zapis=fopen(nazwa,"w"); fprintf(zapis,ZMGsyg); fputc(vwrite,zapis); if (img_x<255) { fputc(0,zapis); } else { img_x=img_x>>8; fputc(img_x,zapis); img_x=image_x; img_x=img_x<<8; img_x=img_x>>8; } fputc(img_x,zapis); if (img_y<255) { fputc(0,zapis); } else { img_y=img_y>>8; fputc(img_y,zapis); img_y=image_y; img_y=img_y<<8; img_y=img_y>>8; } fputc(img_y,zapis); if (vwrite==49) { printf("uncompressed color\n"); for (tempi=0;tempi<image_x*image_y;tempi++) fputc(y_image[tempi],zapis); for (tempi=0;tempi<image_x*image_y/4;tempi++) fputc(cr_image[tempi],zapis); for (tempi=0;tempi<image_x*image_y/4;tempi++) fputc(cb_image[tempi],zapis); } if (vwrite==50) { printf("compressed color\n"); sinput=(image_x*image_y); soutput=(1025*650); tempi=compress2(buf,&soutput,y_image,sinput,9); stemp=soutput; if (soutput<255) { fputc(0,zapis); fputc(0,zapis); } else { stemp=stemp>>16; fputc(stemp,zapis); stemp=soutput; stemp=stemp>>8; fputc(stemp,zapis); stemp=soutput; stemp=stemp<<8; stemp=stemp>>8; } fputc(stemp,zapis); for (tempi=0;tempi<soutput;tempi++) fputc(buf[tempi],zapis); sinput=(image_x*image_y)/4; soutput=(1025*650); tempi=compress2(buf,&soutput,cr_image,sinput,9); stemp=soutput; if (soutput<255) { fputc(0,zapis); fputc(0,zapis); } else { stemp=stemp>>16; fputc(stemp,zapis); stemp=soutput; stemp=stemp>>8; fputc(stemp,zapis); stemp=soutput; stemp=stemp<<8; stemp=stemp>>8; } fputc(stemp,zapis); for (tempi=0;tempi<soutput;tempi++) fputc(buf[tempi],zapis); sinput=(image_x*image_y)/4; soutput=(1025*650); tempi=compress2(buf,&soutput,cb_image,sinput,9); stemp=soutput; if (soutput<255) { fputc(0,zapis); fputc(0,zapis); } else { stemp=stemp>>16; fputc(stemp,zapis); stemp=soutput; stemp=stemp>>8; fputc(stemp,zapis); stemp=soutput; stemp=stemp<<8; stemp=stemp>>8; } fputc(stemp,zapis); for (tempi=0;tempi<soutput;tempi++) fputc(buf[tempi],zapis); } if (vwrite==51) { printf("uncompressed grayscale\n"); for (tempi=0;tempi<image_x*image_y;tempi++) fputc(y_image[tempi],zapis); } if (vwrite==52) { printf("compressed grayscale\n"); sinput=(image_x*image_y); soutput=(1025*650); tempi=compress2(buf,&soutput,y_image,sinput,9); stemp=soutput; if (soutput<255) { fputc(0,zapis); fputc(0,zapis); } else { stemp=stemp>>16; fputc(stemp,zapis); stemp=soutput; stemp=stemp>>8; fputc(stemp,zapis); stemp=soutput; stemp=stemp<<8; stemp=stemp>>8; } fputc(stemp,zapis); for (tempi=0;tempi<soutput;tempi++) fputc(buf[tempi],zapis); } fclose(zapis); printf("Done...\n"); return 0;#endif}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -