rqr 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/History.txt +4 -0
- data/License.txt +23 -0
- data/Manifest.txt +29 -0
- data/README.txt +77 -0
- data/Rakefile +4 -0
- data/config/hoe.rb +71 -0
- data/config/requirements.rb +15 -0
- data/ext/rqr/QR_Encode.cpp +1949 -0
- data/ext/rqr/QR_Encode.h +152 -0
- data/ext/rqr/extconf.rb +39 -0
- data/ext/rqr/qr.i +17 -0
- data/ext/rqr/qr_draw.h +34 -0
- data/ext/rqr/qr_draw_jpeg.cpp +131 -0
- data/ext/rqr/qr_draw_jpeg.h +29 -0
- data/ext/rqr/qr_draw_png.cpp +146 -0
- data/ext/rqr/qr_draw_png.h +28 -0
- data/ext/rqr/qr_draw_ps.cpp +240 -0
- data/ext/rqr/qr_draw_ps.h +36 -0
- data/ext/rqr/qr_draw_tiff.cpp +135 -0
- data/ext/rqr/qr_draw_tiff.h +29 -0
- data/ext/rqr/qr_wrap.cxx +3984 -0
- data/ext/rqr/win2ansi.h +20 -0
- data/lib/rqr.rb +9 -0
- data/lib/rqr/errors.rb +9 -0
- data/lib/rqr/qrcode.rb +87 -0
- data/lib/rqr/version.rb +9 -0
- data/setup.rb +1585 -0
- data/test/test_helper.rb +2 -0
- data/test/test_rqr.rb +66 -0
- metadata +88 -0
@@ -0,0 +1,28 @@
|
|
1
|
+
#ifndef _QR_DRAW_PNG_
|
2
|
+
#define _QR_DRAW_PNG_
|
3
|
+
|
4
|
+
#include <stdlib.h>
|
5
|
+
#include <math.h>
|
6
|
+
#include "qr_draw.h"
|
7
|
+
|
8
|
+
#ifdef USE_PNG
|
9
|
+
#include <png.h>
|
10
|
+
#endif
|
11
|
+
|
12
|
+
//=============================================================================
|
13
|
+
// QRDrawPNG クラス
|
14
|
+
//=============================================================================
|
15
|
+
class QRDrawPNG : public QRDraw
|
16
|
+
{
|
17
|
+
private:
|
18
|
+
int raster(unsigned char data[MAX_MODULESIZE][MAX_MODULESIZE]);
|
19
|
+
int write();
|
20
|
+
|
21
|
+
public:
|
22
|
+
QRDrawPNG();
|
23
|
+
~QRDrawPNG();
|
24
|
+
int draw(char *filename, int modulesize, int symbolsize,
|
25
|
+
unsigned char data[MAX_MODULESIZE][MAX_MODULESIZE], void *opt);
|
26
|
+
};
|
27
|
+
|
28
|
+
#endif
|
@@ -0,0 +1,240 @@
|
|
1
|
+
#include "qr_draw_ps.h"
|
2
|
+
|
3
|
+
//=================================================================================
|
4
|
+
// QRDrawPS::QRDrawPS
|
5
|
+
//=================================================================================
|
6
|
+
QRDrawPS::QRDrawPS()
|
7
|
+
{
|
8
|
+
}
|
9
|
+
|
10
|
+
//=============================================================================
|
11
|
+
// QRDrawPS::draw
|
12
|
+
//=============================================================================
|
13
|
+
int QRDrawPS::draw(char *filename, int modulesize, int symbolsize,
|
14
|
+
unsigned char data[MAX_MODULESIZE][MAX_MODULESIZE], void *opt)
|
15
|
+
{
|
16
|
+
if(!filename) return(1);
|
17
|
+
setup(filename, modulesize, symbolsize);
|
18
|
+
|
19
|
+
bool preview;
|
20
|
+
if(!opt){
|
21
|
+
preview = false;
|
22
|
+
}else{
|
23
|
+
preview = (bool)opt;
|
24
|
+
}
|
25
|
+
|
26
|
+
if(preview){
|
27
|
+
#ifdef USE_TIFF
|
28
|
+
return( this->write2(data) );
|
29
|
+
#endif
|
30
|
+
}else{
|
31
|
+
return( this->write(data, "wb") );
|
32
|
+
}
|
33
|
+
|
34
|
+
return(1);
|
35
|
+
}
|
36
|
+
|
37
|
+
//=============================================================================
|
38
|
+
// QRDrawPS::write_preview_eps
|
39
|
+
//=============================================================================
|
40
|
+
int QRDrawPS::write2(unsigned char data[MAX_MODULESIZE][MAX_MODULESIZE])
|
41
|
+
{
|
42
|
+
#ifdef USE_TIFF
|
43
|
+
FILE *stream;
|
44
|
+
unsigned char lt[4];
|
45
|
+
struct stat st;
|
46
|
+
|
47
|
+
if((stream=fopen(this->filename, "wb")) == NULL) return(1);
|
48
|
+
|
49
|
+
/* ダミーヘッダー書き込み */
|
50
|
+
this->write_header(stream);
|
51
|
+
|
52
|
+
/* TIFF書き込み */
|
53
|
+
this->write_preview(stream, data);
|
54
|
+
fclose(stream);
|
55
|
+
|
56
|
+
/* EPS書き込み */
|
57
|
+
this->write(data, "a");
|
58
|
+
|
59
|
+
/* EPSサイズ算出 */
|
60
|
+
stat(this->filename, &st);
|
61
|
+
unsigned int esize = st.st_size - (this->tsize+30);
|
62
|
+
|
63
|
+
/* ヘッダー書き換え */
|
64
|
+
if((stream=fopen(this->filename, "rb+")) == NULL) return(1);
|
65
|
+
|
66
|
+
/* PS開始位置 */
|
67
|
+
fseek(stream, 4, SEEK_SET);
|
68
|
+
this->littleEndian(30+this->tsize, lt);
|
69
|
+
fprintf(stream, "%c%c%c%c", lt[0], lt[1], lt[2], lt[3]);
|
70
|
+
|
71
|
+
/* PS長 */
|
72
|
+
fseek(stream, 8, SEEK_SET);
|
73
|
+
this->littleEndian(esize, lt);
|
74
|
+
fprintf(stream, "%c%c%c%c", lt[0], lt[1], lt[2], lt[3]);
|
75
|
+
|
76
|
+
/* TIFFプレビュー長 */
|
77
|
+
fseek(stream, 24, SEEK_SET);
|
78
|
+
this->littleEndian(this->tsize, lt);
|
79
|
+
fprintf(stream, "%c%c%c%c", lt[0], lt[1], lt[2], lt[3]);
|
80
|
+
|
81
|
+
fclose(stream);
|
82
|
+
|
83
|
+
return(0);
|
84
|
+
#else
|
85
|
+
return(1);
|
86
|
+
#endif
|
87
|
+
}
|
88
|
+
|
89
|
+
//=============================================================================
|
90
|
+
// QRDrawPS::write_header
|
91
|
+
//=============================================================================
|
92
|
+
void QRDrawPS::write_header(FILE *stream)
|
93
|
+
{
|
94
|
+
unsigned char lt[4];
|
95
|
+
|
96
|
+
/* ナミモニ */
|
97
|
+
fprintf(stream, "%c%c%c%c", 0xC5, 0xD0, 0xD3, 0xC6);
|
98
|
+
|
99
|
+
/* PostScript開始位置 */
|
100
|
+
fprintf(stream, "%c%c%c%c", 0x00, 0x00, 0x00, 0x00);
|
101
|
+
|
102
|
+
/* PostScript長さ */
|
103
|
+
fprintf(stream, "%c%c%c%c", 0x00, 0x00, 0x00, 0x00);
|
104
|
+
|
105
|
+
/* MetaFile */
|
106
|
+
fprintf(stream, "%c%c%c%c", 0x00, 0x00, 0x00, 0x00);
|
107
|
+
fprintf(stream, "%c%c%c%c", 0x00, 0x00, 0x00, 0x00);
|
108
|
+
|
109
|
+
/* TIFFプレビュー開始位置 */
|
110
|
+
littleEndian(30, lt);
|
111
|
+
fprintf(stream, "%c%c%c%c", lt[0], lt[1], lt[2], lt[3]);
|
112
|
+
|
113
|
+
/* TIFFプレビュー長 */
|
114
|
+
fprintf(stream, "%c%c%c%c", 0x00, 0x00, 0x00, 0x00);
|
115
|
+
|
116
|
+
/* チェックサム */
|
117
|
+
fprintf(stream, "%c%c", 0xff, 0xff);
|
118
|
+
}
|
119
|
+
|
120
|
+
//=================================================================================
|
121
|
+
// littleEndian
|
122
|
+
//=================================================================================
|
123
|
+
void QRDrawPS::littleEndian(int data, unsigned char *lt)
|
124
|
+
{
|
125
|
+
lt[0] = data & 0x000000FF;
|
126
|
+
lt[1] = (data & 0x0000FF00) >> 8;
|
127
|
+
lt[2] = (data & 0x00FF0000) >> 16;
|
128
|
+
lt[3] = (data & 0xFF000000) >> 24;
|
129
|
+
}
|
130
|
+
|
131
|
+
//=============================================================================
|
132
|
+
// QRDrawPS::write_preview
|
133
|
+
//=============================================================================
|
134
|
+
int QRDrawPS::write_preview(FILE *stream, unsigned char data[MAX_MODULESIZE][MAX_MODULESIZE])
|
135
|
+
{
|
136
|
+
#ifdef USE_TIFF
|
137
|
+
FILE *t;
|
138
|
+
char tmp[L_tmpnam];
|
139
|
+
QRDrawTIFF tif;
|
140
|
+
unsigned char *p;
|
141
|
+
|
142
|
+
tmpnam(tmp);
|
143
|
+
if( tif.draw(tmp, this->msize, this->ssize, data, NULL) ) return(1);
|
144
|
+
|
145
|
+
/* TIFFをオープンしてファイルサイズを取得する */
|
146
|
+
if((t=fopen(tmp, "rb")) == NULL){
|
147
|
+
remove(tmp);
|
148
|
+
return(1);
|
149
|
+
}
|
150
|
+
fseek(t, 0, SEEK_END);
|
151
|
+
this->tsize = ftell(t);
|
152
|
+
fseek(t, 0, SEEK_SET);
|
153
|
+
|
154
|
+
/* TIFF本体の書き込み */
|
155
|
+
p = (unsigned char *)malloc(this->tsize);
|
156
|
+
fread(p, 1, this->tsize, t);
|
157
|
+
fwrite(p, 1, this->tsize, stream);
|
158
|
+
|
159
|
+
free(p);
|
160
|
+
fclose(t);
|
161
|
+
remove(tmp);
|
162
|
+
|
163
|
+
return(0);
|
164
|
+
#else
|
165
|
+
return(1);
|
166
|
+
#endif
|
167
|
+
}
|
168
|
+
|
169
|
+
//=============================================================================
|
170
|
+
// QRDrawPS::write_eps
|
171
|
+
//=============================================================================
|
172
|
+
int QRDrawPS::write(unsigned char data[MAX_MODULESIZE][MAX_MODULESIZE], char *mode)
|
173
|
+
{
|
174
|
+
FILE *stream;
|
175
|
+
int i, j;
|
176
|
+
time_t mytime;
|
177
|
+
struct tm *lt;
|
178
|
+
|
179
|
+
if((stream=fopen(this->filename, mode)) == NULL) return(1);
|
180
|
+
|
181
|
+
fprintf(stream, "%%!PS-Adobe-3.0 EPSF-3.0\n");
|
182
|
+
fprintf(stream, "%%%%Creator: kei-soe\n");
|
183
|
+
fprintf(stream, "%%%%Title: %s\n", this->filename);
|
184
|
+
|
185
|
+
time(&mytime);
|
186
|
+
lt = localtime(&mytime);
|
187
|
+
fprintf(stream, "%%%%CreationDate: %04d:%02d:%02d %02d:%02d:%02d\n",
|
188
|
+
lt->tm_year+1900, lt->tm_mon+1, lt->tm_mday,
|
189
|
+
lt->tm_hour, lt->tm_min, lt->tm_sec);
|
190
|
+
fprintf(stream, "%%%%BoundingBox: 0 0 %d %d\n", this->rsize, this->rsize);
|
191
|
+
fprintf(stream, "%%%%HiResBoundingBox: 0 0 %d %d\n", this->rsize, this->rsize);
|
192
|
+
fprintf(stream, "%%%%DocumentProcessColors: Cyan Magenta Yellow Black\n");
|
193
|
+
fprintf(stream, "%%%%EndComments\n");
|
194
|
+
fprintf(stream, "%%%%BeginProlog\n");
|
195
|
+
fprintf(stream, "%%%%EndProlog\n");
|
196
|
+
fprintf(stream, "%%%%BeginSetup\n");
|
197
|
+
fprintf(stream, "%%%%EndSetup\n");
|
198
|
+
|
199
|
+
fprintf(stream, "/size %d def\n", this->ssize);
|
200
|
+
fprintf(stream, "/margin %d def\n", MARGIN_SIZE);
|
201
|
+
fprintf(stream, "gsave\n");
|
202
|
+
fprintf(stream, "%d %d scale\n", this->msize, this->msize);
|
203
|
+
fprintf(stream, "newpath\n");
|
204
|
+
fprintf(stream, "0 0 moveto\n");
|
205
|
+
fprintf(stream, "0 size margin 2 mul add rlineto\n");
|
206
|
+
fprintf(stream, "size margin 2 mul add 0 rlineto\n");
|
207
|
+
fprintf(stream, "0 size margin 2 mul add neg rlineto\n");
|
208
|
+
fprintf(stream, "closepath\n");
|
209
|
+
fprintf(stream, "1 setgray\n");
|
210
|
+
fprintf(stream, "fill\n");
|
211
|
+
|
212
|
+
// ドット描画
|
213
|
+
for(i=0; i<this->ssize; i++){
|
214
|
+
for(j=0; j<this->ssize; j++) fprintf(stream, "%d ", data[j][i]);
|
215
|
+
fprintf(stream, "\n");
|
216
|
+
}
|
217
|
+
|
218
|
+
fprintf(stream, "margin margin translate\n");
|
219
|
+
fprintf(stream, "0 setgray\n");
|
220
|
+
fprintf(stream, "1 1 size {\n");
|
221
|
+
fprintf(stream, "/ypos exch def\n");
|
222
|
+
fprintf(stream, "size -1 1 {\n");
|
223
|
+
fprintf(stream, "/xpos exch def\n");
|
224
|
+
fprintf(stream, "1 eq {\n");
|
225
|
+
fprintf(stream, "newpath\n");
|
226
|
+
fprintf(stream, "xpos ypos moveto\n");
|
227
|
+
fprintf(stream, "0 -1 rlineto\n");
|
228
|
+
fprintf(stream, "-1 0 rlineto\n");
|
229
|
+
fprintf(stream, "0 1 rlineto\n");
|
230
|
+
fprintf(stream, "closepath\n");
|
231
|
+
fprintf(stream, "fill\n");
|
232
|
+
fprintf(stream, "} if\n");
|
233
|
+
fprintf(stream, "} for\n");
|
234
|
+
fprintf(stream, "} for\n");
|
235
|
+
fprintf(stream, "grestore\n");
|
236
|
+
|
237
|
+
fclose(stream);
|
238
|
+
|
239
|
+
return(0);
|
240
|
+
}
|
@@ -0,0 +1,36 @@
|
|
1
|
+
#ifndef _QR_DRAW_PS_
|
2
|
+
#define _QR_DRAW_PS_
|
3
|
+
|
4
|
+
#include <time.h>
|
5
|
+
#include <sys/types.h>
|
6
|
+
#include <sys/stat.h>
|
7
|
+
#include <stdlib.h>
|
8
|
+
#include <stdio.h>
|
9
|
+
#include "qr_draw.h"
|
10
|
+
|
11
|
+
#ifdef USE_TIFF
|
12
|
+
#include "qr_draw_tiff.h"
|
13
|
+
#endif
|
14
|
+
|
15
|
+
//=============================================================================
|
16
|
+
// QRDrawPS クラス
|
17
|
+
//=============================================================================
|
18
|
+
class QRDrawPS : public QRDraw
|
19
|
+
{
|
20
|
+
private:
|
21
|
+
unsigned int tsize;
|
22
|
+
|
23
|
+
private:
|
24
|
+
int write(unsigned char data[MAX_MODULESIZE][MAX_MODULESIZE], char *mode); //normal ps
|
25
|
+
int write2(unsigned char data[MAX_MODULESIZE][MAX_MODULESIZE]); //preview ps
|
26
|
+
void write_header(FILE *stream);
|
27
|
+
int write_preview(FILE *stream, unsigned char data[MAX_MODULESIZE][MAX_MODULESIZE]);
|
28
|
+
void littleEndian(int data, unsigned char *lt);
|
29
|
+
|
30
|
+
public:
|
31
|
+
QRDrawPS();
|
32
|
+
int draw(char *filename, int modulesize, int symbolsize,
|
33
|
+
unsigned char data[MAX_MODULESIZE][MAX_MODULESIZE], void *opt);
|
34
|
+
};
|
35
|
+
|
36
|
+
#endif
|
@@ -0,0 +1,135 @@
|
|
1
|
+
#include "qr_draw_tiff.h"
|
2
|
+
|
3
|
+
//=================================================================================
|
4
|
+
// QRDrawPNG::QRDrawPNG
|
5
|
+
//=================================================================================
|
6
|
+
QRDrawTIFF::QRDrawTIFF()
|
7
|
+
{
|
8
|
+
#ifdef USE_TIFF
|
9
|
+
bit_image = NULL;
|
10
|
+
#endif
|
11
|
+
}
|
12
|
+
|
13
|
+
//=================================================================================
|
14
|
+
// QRDrawTIFF::~QRDrawTIFF
|
15
|
+
//=================================================================================
|
16
|
+
QRDrawTIFF::~QRDrawTIFF()
|
17
|
+
{
|
18
|
+
#ifdef USE_TIFF
|
19
|
+
int i;
|
20
|
+
|
21
|
+
if(bit_image){
|
22
|
+
for(i=0; i<this->rsize; i++){
|
23
|
+
free(bit_image[i]);
|
24
|
+
}
|
25
|
+
free(bit_image);
|
26
|
+
}
|
27
|
+
#endif
|
28
|
+
}
|
29
|
+
|
30
|
+
//=============================================================================
|
31
|
+
// QRDrawPNG::draw
|
32
|
+
//=============================================================================
|
33
|
+
int QRDrawTIFF::draw(char *filename, int modulesize, int symbolsize,
|
34
|
+
unsigned char data[MAX_MODULESIZE][MAX_MODULESIZE], void *opt)
|
35
|
+
{
|
36
|
+
#ifdef USE_TIFF
|
37
|
+
if(!filename) return(1);
|
38
|
+
setup(filename, modulesize, symbolsize);
|
39
|
+
if( this->raster(data) )return(1);
|
40
|
+
if( this->write() ) return(1);
|
41
|
+
|
42
|
+
return(0);
|
43
|
+
#else
|
44
|
+
return(1);
|
45
|
+
#endif
|
46
|
+
}
|
47
|
+
|
48
|
+
//=================================================================================
|
49
|
+
// QRDrawTIFF::raster
|
50
|
+
//=================================================================================
|
51
|
+
int QRDrawTIFF::raster(unsigned char data[MAX_MODULESIZE][MAX_MODULESIZE])
|
52
|
+
{
|
53
|
+
#ifdef USE_TIFF
|
54
|
+
int bitw = (int)ceil(this->rsize/8) + 1;
|
55
|
+
|
56
|
+
/* 実際にデータを置く領域を確保 */
|
57
|
+
bit_image = (unsigned char **)malloc(sizeof(unsigned char *) * this->rsize);
|
58
|
+
for(int i=0; i<this->rsize; i++){
|
59
|
+
bit_image[i] = (unsigned char *)malloc(bitw);
|
60
|
+
memset(bit_image[i], 0, bitw);
|
61
|
+
}
|
62
|
+
|
63
|
+
for(int i=0; i<this->ssize; i++){
|
64
|
+
int dp = MARGIN_SIZE*this->msize / 8; //横方向のバイト位置
|
65
|
+
int sht =(MARGIN_SIZE*this->msize % 8) ? 3 : 7; //ビットシフト
|
66
|
+
unsigned char c = 0; //1バイトの構成を保存
|
67
|
+
|
68
|
+
for(int j=0; j<this->ssize; j++){
|
69
|
+
/* 1行分生成 */
|
70
|
+
for(int k=0; k<this->msize; k++){
|
71
|
+
c += (data[j][i] << sht);
|
72
|
+
sht--;
|
73
|
+
|
74
|
+
bit_image[(i+MARGIN_SIZE)*this->msize][ dp ] = c;
|
75
|
+
|
76
|
+
if(sht < 0){
|
77
|
+
sht = 7;
|
78
|
+
c = 0;
|
79
|
+
dp++;
|
80
|
+
}
|
81
|
+
}
|
82
|
+
}
|
83
|
+
/* モジュールサイズ分縦方向に増やす */
|
84
|
+
for(int k=1; k<this->msize; k++){
|
85
|
+
memcpy(bit_image[(i+MARGIN_SIZE)*this->msize+k], bit_image[(i+MARGIN_SIZE)*this->msize], bitw);
|
86
|
+
}
|
87
|
+
}
|
88
|
+
|
89
|
+
return(0);
|
90
|
+
#else
|
91
|
+
return(1);
|
92
|
+
#endif
|
93
|
+
}
|
94
|
+
|
95
|
+
//=================================================================================
|
96
|
+
// QRDrawTIFF::write_png
|
97
|
+
//=================================================================================
|
98
|
+
int QRDrawTIFF::write()
|
99
|
+
{
|
100
|
+
#ifdef USE_TIFF
|
101
|
+
TIFF *tiff;
|
102
|
+
int i;
|
103
|
+
|
104
|
+
/* Open the TIFF file */
|
105
|
+
if( (tiff=TIFFOpen(this->filename, "w")) == NULL ) return(1);
|
106
|
+
|
107
|
+
/* タグ */
|
108
|
+
TIFFSetField(tiff, TIFFTAG_IMAGEWIDTH, this->rsize); /* 幅(ピクセル数) */
|
109
|
+
TIFFSetField(tiff, TIFFTAG_IMAGELENGTH, this->rsize); /* 高(スキャンライン数) */
|
110
|
+
TIFFSetField(tiff, TIFFTAG_COMPRESSION, COMPRESSION_NONE); /* 圧縮モード */
|
111
|
+
TIFFSetField(tiff, TIFFTAG_BITSPERSAMPLE, 1); /* ピクセルの深さ */
|
112
|
+
TIFFSetField(tiff, TIFFTAG_PHOTOMETRIC, PHOTOMETRIC_MINISWHITE); /* カラータイプ */
|
113
|
+
TIFFSetField(tiff, TIFFTAG_SAMPLESPERPIXEL, 1); /* カラープレーン数 */
|
114
|
+
TIFFSetField(tiff, TIFFTAG_ORIENTATION, ORIENTATION_TOPLEFT); /* スキャン方向 */
|
115
|
+
TIFFSetField(tiff, TIFFTAG_PLANARCONFIG, PLANARCONFIG_CONTIG); /* ? */
|
116
|
+
TIFFSetField(tiff, TIFFTAG_XRESOLUTION, 72.0); /* 解像度 */
|
117
|
+
TIFFSetField(tiff, TIFFTAG_YRESOLUTION, 72.0); /* 解像度 */
|
118
|
+
TIFFSetField(tiff, TIFFTAG_RESOLUTIONUNIT, RESUNIT_INCH); /* 解像度の単位(RESUNIT_INCH:インチ) */
|
119
|
+
TIFFSetField(tiff, TIFFTAG_ROWSPERSTRIP, this->rsize); /* 1ストリップに何行格納されるか */
|
120
|
+
|
121
|
+
/* 1行ずつ書き込み */
|
122
|
+
for(i=0 ; i<this->rsize ; i++){
|
123
|
+
if( TIFFWriteScanline(tiff, bit_image[i], i, 0) < 0 ){
|
124
|
+
TIFFClose(tiff);
|
125
|
+
return(1);
|
126
|
+
}
|
127
|
+
}
|
128
|
+
|
129
|
+
TIFFClose(tiff);
|
130
|
+
|
131
|
+
return(0);
|
132
|
+
#else
|
133
|
+
return(1);
|
134
|
+
#endif
|
135
|
+
}
|
@@ -0,0 +1,29 @@
|
|
1
|
+
#ifndef _QR_DRAW_TIFF_
|
2
|
+
#define _QR_DRAW_TIFF_
|
3
|
+
|
4
|
+
#include <stdlib.h>
|
5
|
+
#include <string.h>
|
6
|
+
#include <math.h>
|
7
|
+
#include "qr_draw.h"
|
8
|
+
|
9
|
+
#ifdef USE_TIFF
|
10
|
+
#include <tiffio.h>
|
11
|
+
#endif
|
12
|
+
|
13
|
+
//=============================================================================
|
14
|
+
// QRDrawTIFF クラス
|
15
|
+
//=============================================================================
|
16
|
+
class QRDrawTIFF : public QRDraw
|
17
|
+
{
|
18
|
+
private:
|
19
|
+
int raster(unsigned char data[MAX_MODULESIZE][MAX_MODULESIZE]);
|
20
|
+
int write();
|
21
|
+
|
22
|
+
public:
|
23
|
+
QRDrawTIFF();
|
24
|
+
~QRDrawTIFF();
|
25
|
+
int draw(char *filename, int modulesize, int symbolsize,
|
26
|
+
unsigned char data[MAX_MODULESIZE][MAX_MODULESIZE], void *opt);
|
27
|
+
};
|
28
|
+
|
29
|
+
#endif
|