📄 mga_jpg.c
字号:
/* (c) HelDoRe Jpeg unit ... v0.0.5 Supported formats : libjpeg*/ #define VERJPG " unit v0.0.5"#include <stdio.h>#include "../mga_view.h"#ifdef USE_LIBJPG#include <jpeglib.h>#include <setjmp.h>#endifvoid help_jpg(){#ifdef USE_LIBJPGprintf("JPG%s\n + uses libjpeg\n",VERJPG);#endif}#ifdef USE_LIBJPGstruct my_error_mgr { struct jpeg_error_mgr pub; jmp_buf setjmp_buffer;};typedef struct my_error_mgr * my_error_ptr;METHODDEF(void) my_error_exit(j_common_ptr cinfo) { my_error_ptr myerr = (my_error_ptr) cinfo->err; (*cinfo->err->output_message)(cinfo); longjmp(myerr->setjmp_buffer,1); }#endif int detect_jpg(){#ifdef USE_LIBJPG short int JPsyg; struct jpeg_decompress_struct cinfo; struct my_error_mgr jerr; JSAMPARRAY buffer; int row_stride,jaka; fread(&JPsyg,sizeof (short int),1,plik); if (JPsyg != -9985) { return 1; } rewind(plik); cinfo.err = jpeg_std_error(&jerr.pub); jerr.pub.error_exit = my_error_exit; if (setjmp(jerr.setjmp_buffer)) { jpeg_destroy_decompress(&cinfo); return 2; } jpeg_create_decompress(&cinfo); jpeg_stdio_src(&cinfo,plik); (void) jpeg_read_header(&cinfo,TRUE); (void) jpeg_start_decompress(&cinfo); image_x=cinfo.output_width; image_y=cinfo.output_height; jaka=cinfo.num_components; check_image(image_x,image_y,8); printf("Jpeg%s\n",VERJPG); printf("Jpeg detected : %ix%i ",image_x,image_y); if (jaka==3) printf("color\n"); else printf("grayscale\n"); row_stride=cinfo.output_width*cinfo.output_components; buffer=(*cinfo.mem->alloc_sarray)((j_common_ptr) &cinfo,JPOOL_IMAGE,row_stride,1); y=0; while (cinfo.output_scanline <cinfo.output_height) { (void) jpeg_read_scanlines(&cinfo,buffer,1); if (jaka==3) for (x=0;x<image_x;x++) { tabr[x+y*image_x]=buffer[0][x*3]; tabg[x+y*image_x]=buffer[0][x*3+1]; tabb[x+y*image_x]=buffer[0][x*3+2]; } else for (x=0;x<image_x;x++) { tabr[x+y*image_x]=buffer[0][x]; tabg[x+y*image_x]=tabr[x+y*image_x]; tabb[x+y*image_x]=tabr[x+y*image_x]; } y++; } (void) jpeg_finish_decompress(&cinfo); jpeg_destroy_decompress(&cinfo); rewind(plik); fseek(plik,20,SEEK_CUR); tempi=fgetc(plik); if ((tempi==255) && (fgetc(plik)==254)) { fprintf(stderr,"Comment : "); tempi=fgetc(plik); tempi=fgetc(plik); for (x=0;x<tempi-2;x++) { printf("%c",(char)depth=fgetc(plik)); } printf("\n"); } return 0; #else return 1;#endif}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -