JunkBox_Lib++ (for Windows) 1.10.1
Loading...
Searching...
No Matches
Jpeg2KToolCommon.cpp
Go to the documentation of this file.
1
19int jbxl::isJPEG2KHeader(Buffer buf)
20{
21 int format = JP2K_FMT_NONE;
22
23 if (!memcmp(buf.buf, JP2K_MAGIC_RFC3745_JP2, 12) || !memcmp(buf.buf, JP2K_MAGIC_JP2, 4)) {
24 format = JP2K_FMT_JP2;
25 }
26 else if (!memcmp(buf.buf, JP2K_MAGIC_J2K, 4)) {
27 format = JP2K_FMT_J2K;
28 }
29 return format;
30}
31
32
37int jbxl::repairJPEG2KFile(const char* fname, const char* writef)
38{
39 if (fname==NULL || writef==NULL) return JBXL_GRAPH_IVDARG_ERROR;
40 int c_flag = FALSE;
41
42 // read file
43 Buffer buf = read_Buffer_file(fname);
44 if (buf.vldsz<=0) return JBXL_GRAPH_RDFILE_ERROR;
45
46 // EOC (ffd9)
47 unsigned char eoc[] = {0xff, 0xd9};
48 if (buf.buf[buf.vldsz-2]!=eoc[0] || buf.buf[buf.vldsz-1]!=eoc[1]) {
49 cat_b2Buffer(eoc, &buf, 2);
50 c_flag = TRUE;
51 }
52
53 // Title Part (ff90)
54 for (int i=0; i<buf.vldsz-1; i++) {
55 if (buf.buf[i]==0xff && buf.buf[i+1]==0x90) {
56 if (i+9<buf.vldsz) {
57 buf.buf[i+6] = 0x00; // Lost: 0 でOK
58 buf.buf[i+7] = 0x00;
59 buf.buf[i+8] = 0x00;
60 buf.buf[i+9] = 0x00;
61 c_flag = TRUE;
62 break;
63 }
64 }
65 }
66
67 // write file
69 if (c_flag) {
70 ret = JBXL_NORMAL;
71 int sbf = save_Buffer_file(buf, (char*)writef);
72 if (!sbf) ret = JBXL_GRAPH_WRFILE_ERROR;
73 }
74 free_Buffer(&buf);
75
76 return ret;
77}
78
int cat_b2Buffer(void *src, Buffer *dst, int len)
任意のバイナリデータsrcを Buffer型変数dstへ lenバイト catする.
Definition buffer.cpp:585
void free_Buffer(Buffer *buf)
Buffer型変数のバッファ部を解放する
Definition buffer.cpp:128
Buffer read_Buffer_file(const char *fn)
ファイル fn の内容を Buffer型変数に読み込む.
Definition buffer.cpp:1467
int save_Buffer_file(Buffer buf, char *fn)
ファイル fn へ Buffer型変数の buf部を書き込む
Definition buffer.cpp:1530
#define TRUE
Definition common.h:226
#define FALSE
Definition common.h:223
#define JBXL_GRAPH_IVDARG_ERROR
無効な引数
Definition jbxl_state.h:178
#define JBXL_GRAPH_RDFILE_ERROR
ファイルの読み込みエラー
Definition jbxl_state.h:174
#define JBXL_NORMAL
正常
Definition jbxl_state.h:32
#define JBXL_GRAPH_WRFILE_ERROR
ファイルの書き込みエラー
Definition jbxl_state.h:175
#define JBXL_GRAPH_IVDDATA_ERROR
無効なデータ
Definition jbxl_state.h:181
int vldsz
データの長さ.バイナリデータの場合も使用可能.文字列の場合は 0x00 を含まない.
Definition buffer.h:37
unsigned char * buf
バッファの先頭へのポインタ.str[bufsz]は必ず 0x00となる.
Definition buffer.h:39