qrtools 1.0.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.
Files changed (66) hide show
  1. data/History.txt +6 -0
  2. data/Manifest.txt +65 -0
  3. data/README.txt +75 -0
  4. data/Rakefile +49 -0
  5. data/bin/qrdecode +14 -0
  6. data/ext/qrtools/Makefile.in +65 -0
  7. data/ext/qrtools/bitstream.cpp +147 -0
  8. data/ext/qrtools/bitstream.h +48 -0
  9. data/ext/qrtools/codedata.cpp +506 -0
  10. data/ext/qrtools/codedata.h +95 -0
  11. data/ext/qrtools/container.cpp +288 -0
  12. data/ext/qrtools/container.h +175 -0
  13. data/ext/qrtools/decodeqr.h +286 -0
  14. data/ext/qrtools/ecidecoder.cpp +341 -0
  15. data/ext/qrtools/ecidecoder.h +110 -0
  16. data/ext/qrtools/extconf.rb +24 -0
  17. data/ext/qrtools/formatinfo.cpp +195 -0
  18. data/ext/qrtools/formatinfo.h +113 -0
  19. data/ext/qrtools/galois.cpp +593 -0
  20. data/ext/qrtools/galois.h +134 -0
  21. data/ext/qrtools/imagereader.cpp +1099 -0
  22. data/ext/qrtools/imagereader.h +127 -0
  23. data/ext/qrtools/libdecodeqr.cpp +195 -0
  24. data/ext/qrtools/libdecodeqr.dep +80 -0
  25. data/ext/qrtools/libdecodeqr.dsp +160 -0
  26. data/ext/qrtools/libdecodeqr.dsw +29 -0
  27. data/ext/qrtools/libdecodeqr.mak +245 -0
  28. data/ext/qrtools/qrerror.h +40 -0
  29. data/ext/qrtools/qrtools.c +17 -0
  30. data/ext/qrtools/qrtools.h +21 -0
  31. data/ext/qrtools/qrtools_decoder.c +123 -0
  32. data/ext/qrtools/qrtools_decoder.h +10 -0
  33. data/ext/qrtools/qrtools_encoder.c +63 -0
  34. data/ext/qrtools/qrtools_encoder.h +10 -0
  35. data/ext/qrtools/qrtools_header.c +51 -0
  36. data/ext/qrtools/qrtools_header.h +10 -0
  37. data/ext/qrtools/qrtools_image.c +80 -0
  38. data/ext/qrtools/qrtools_image.h +11 -0
  39. data/ext/qrtools/qrtools_qrcode.c +36 -0
  40. data/ext/qrtools/qrtools_qrcode.h +10 -0
  41. data/ext/qrtools/qrtools_ui_camera.c +58 -0
  42. data/ext/qrtools/qrtools_ui_camera.h +10 -0
  43. data/ext/qrtools/qrtools_ui_window.c +40 -0
  44. data/ext/qrtools/qrtools_ui_window.h +10 -0
  45. data/ext/qrtools/qrtypes.h +42 -0
  46. data/ext/qrtools/version.h +42 -0
  47. data/lib/qrtools.rb +11 -0
  48. data/lib/qrtools/decoder.rb +17 -0
  49. data/lib/qrtools/encoder.rb +14 -0
  50. data/lib/qrtools/image.rb +43 -0
  51. data/lib/qrtools/qrcode.rb +54 -0
  52. data/lib/qrtools/ui/camera.rb +28 -0
  53. data/lib/qrtools/ui/window.rb +16 -0
  54. data/lib/qrtools/version.rb +3 -0
  55. data/qrtools.gemspec +38 -0
  56. data/test/assets/01-1.jpg +0 -0
  57. data/test/helper.rb +17 -0
  58. data/test/test_decoder.rb +67 -0
  59. data/test/test_encoder.rb +35 -0
  60. data/test/test_header.rb +14 -0
  61. data/test/test_image.rb +19 -0
  62. data/test/test_qrcode.rb +78 -0
  63. data/test/test_qrdecode.rb +0 -0
  64. data/test/ui/test_camera.rb +43 -0
  65. data/test/ui/test_window.rb +34 -0
  66. metadata +138 -0
@@ -0,0 +1,10 @@
1
+ #ifndef QRTOOLS_DECODER
2
+ #define QRTOOLS_DECODER
3
+
4
+ #include <qrtools.h>
5
+
6
+ extern VALUE cQRToolsDecoder;
7
+
8
+ void init_qrtools_decoder();
9
+
10
+ #endif
@@ -0,0 +1,63 @@
1
+ #include <qrtools_encoder.h>
2
+
3
+ static VALUE encode(int argc, VALUE *argv, VALUE klass)
4
+ {
5
+ //extern QRcode *QRcode_encodeString(const char *string, int version, QRecLevel level, QRencodeMode hint, int casesensitive);
6
+ VALUE string, options;
7
+ if(rb_scan_args(argc, argv, "11", &string, &options) == 1) {
8
+ options = rb_hash_new();
9
+ }
10
+
11
+ VALUE version = rb_hash_aref(options, ID2SYM(rb_intern("version")));
12
+ VALUE level = rb_hash_aref(options, ID2SYM(rb_intern("error_correction")));
13
+ VALUE case_sensitive = rb_hash_aref(options, ID2SYM(rb_intern("case_sensitive")));
14
+ VALUE mode = rb_hash_aref(options, ID2SYM(rb_intern("mode")));
15
+
16
+ int cs = 0;
17
+ if(RTEST(case_sensitive) && case_sensitive == Qtrue) cs = 1;
18
+
19
+ QRcode * code = QRcode_encodeString(
20
+ StringValuePtr(string),
21
+ RTEST(version) ? NUM2INT(version) : 0,
22
+ RTEST(level) ? NUM2INT(level) : 0,
23
+ RTEST(mode) ? NUM2INT(mode) : 2,
24
+ cs
25
+ );
26
+ if(NULL == code) rb_raise(rb_eRuntimeError, "could not create code");
27
+ return Data_Wrap_Struct(cQRToolsQRCode, NULL, QRcode_free, code);
28
+ }
29
+
30
+ static VALUE version(VALUE self)
31
+ {
32
+ QRinput * input;
33
+ Data_Get_Struct(self, QRinput, input);
34
+ return INT2NUM(QRinput_getVersion(input));
35
+ }
36
+
37
+ static VALUE set_version(VALUE self, VALUE version)
38
+ {
39
+ QRinput * input;
40
+ Data_Get_Struct(self, QRinput, input);
41
+ QRinput_setVersion(input, NUM2INT(version));
42
+
43
+ return self;
44
+ }
45
+
46
+ static VALUE allocate(VALUE klass)
47
+ {
48
+ return Data_Wrap_Struct(klass, NULL, QRinput_free, QRinput_new());
49
+ }
50
+
51
+ VALUE cQRToolsEncoder;
52
+ void init_qrtools_encoder()
53
+ {
54
+ VALUE qrtools = rb_define_module("QRTools");
55
+ VALUE klass = rb_define_class_under(qrtools, "Encoder", rb_cObject);
56
+
57
+ cQRToolsEncoder = klass;
58
+
59
+ rb_define_alloc_func(klass, allocate);
60
+ rb_define_singleton_method(klass, "encode", encode, -1);
61
+ rb_define_method(klass, "version", version, 0);
62
+ rb_define_method(klass, "version=", set_version, 1);
63
+ }
@@ -0,0 +1,10 @@
1
+ #ifndef QRTOOLS_ENDECODER
2
+ #define QRTOOLS_ENDECODER
3
+
4
+ #include <qrtools.h>
5
+
6
+ extern VALUE cQRToolsEncoder;
7
+
8
+ void init_qrtools_encoder();
9
+
10
+ #endif
@@ -0,0 +1,51 @@
1
+ #include <qrtools_header.h>
2
+
3
+ static VALUE model(VALUE self)
4
+ {
5
+ QrCodeHeader * header;
6
+ Data_Get_Struct(self, QrCodeHeader, header);
7
+ return INT2NUM(header->model);
8
+ }
9
+
10
+ static VALUE version(VALUE self)
11
+ {
12
+ QrCodeHeader * header;
13
+ Data_Get_Struct(self, QrCodeHeader, header);
14
+ return INT2NUM(header->version);
15
+ }
16
+
17
+ static VALUE level(VALUE self)
18
+ {
19
+ QrCodeHeader * header;
20
+ Data_Get_Struct(self, QrCodeHeader, header);
21
+ return INT2NUM(header->level);
22
+ }
23
+
24
+ static VALUE character_size(VALUE self)
25
+ {
26
+ QrCodeHeader * header;
27
+ Data_Get_Struct(self, QrCodeHeader, header);
28
+ return INT2NUM(header->charactor_size);
29
+ }
30
+
31
+ static VALUE byte_size(VALUE self)
32
+ {
33
+ QrCodeHeader * header;
34
+ Data_Get_Struct(self, QrCodeHeader, header);
35
+ return INT2NUM(header->byte_size);
36
+ }
37
+
38
+ VALUE cQRToolsHeader;
39
+ void init_qrtools_header()
40
+ {
41
+ VALUE qrtools = rb_define_module("QRTools");
42
+ VALUE klass = rb_define_class_under(qrtools, "Header", rb_cObject);
43
+
44
+ cQRToolsHeader = klass;
45
+
46
+ rb_define_method(klass, "model", model, 0);
47
+ rb_define_method(klass, "version", version, 0);
48
+ rb_define_method(klass, "level", level, 0);
49
+ rb_define_method(klass, "character_size", character_size, 0);
50
+ rb_define_method(klass, "byte_size", byte_size, 0);
51
+ }
@@ -0,0 +1,10 @@
1
+ #ifndef QRTOOLS_HEADER
2
+ #define QRTOOLS_HEADER
3
+
4
+ #include <qrtools.h>
5
+
6
+ extern VALUE cQRToolsHeader;
7
+
8
+ void init_qrtools_header();
9
+
10
+ #endif
@@ -0,0 +1,80 @@
1
+ #include <qrtools_image.h>
2
+
3
+ static void dealloc(IplImage * img)
4
+ {
5
+ cvReleaseImage(&img);
6
+ }
7
+
8
+ static VALUE load(VALUE klass, VALUE path)
9
+ {
10
+ IplImage *src = cvLoadImage(StringValuePtr(path), 1);
11
+ return Data_Wrap_Struct(klass, NULL, dealloc, src);
12
+ }
13
+
14
+ static VALUE save(VALUE self, VALUE path)
15
+ {
16
+ IplImage * src;
17
+ Data_Get_Struct(self, IplImage, src);
18
+ cvSaveImage(StringValuePtr(path), src);
19
+ return self;
20
+ }
21
+
22
+ /*
23
+ * call-seq:
24
+ * native_draw_line(from, to, r, g, b, thickness, type, shift)
25
+ *
26
+ * Draw line from +from+ vertex to +to+ vertex
27
+ */
28
+ static VALUE native_draw_line(
29
+ VALUE self,
30
+ VALUE _from,
31
+ VALUE _to,
32
+ VALUE _r,
33
+ VALUE _g,
34
+ VALUE _b,
35
+ VALUE _thickness,
36
+ VALUE _type,
37
+ VALUE _shift
38
+ ) {
39
+ IplImage * src;
40
+ Data_Get_Struct(self, IplImage, src);
41
+ cvLine(
42
+ src,
43
+ cvPoint(
44
+ NUM2INT(rb_funcall(_from, rb_intern("x"), 0)),
45
+ NUM2INT(rb_funcall(_from, rb_intern("y"), 0))
46
+ ),
47
+ cvPoint(
48
+ NUM2INT(rb_funcall(_to, rb_intern("x"), 0)),
49
+ NUM2INT(rb_funcall(_to, rb_intern("y"), 0))
50
+ ),
51
+ CV_RGB(
52
+ NUM2INT(_r),
53
+ NUM2INT(_g),
54
+ NUM2INT(_b)
55
+ ),
56
+ NUM2INT(_thickness),
57
+ NUM2INT(_type),
58
+ NUM2INT(_shift)
59
+ );
60
+ return self;
61
+ }
62
+
63
+ VALUE QRTools_Wrap_Image(IplImage * image)
64
+ {
65
+ return Data_Wrap_Struct(cQRToolsImage, NULL, dealloc, image);
66
+ }
67
+
68
+ VALUE cQRToolsImage;
69
+
70
+ void init_qrtools_image()
71
+ {
72
+ VALUE qrtools = rb_define_module("QRTools");
73
+ VALUE klass = rb_define_class_under(qrtools, "Image", rb_cObject);
74
+
75
+ cQRToolsImage = klass;
76
+
77
+ rb_define_singleton_method(klass, "load", load, 1);
78
+ rb_define_method(klass, "save", save, 1);
79
+ rb_define_method(klass, "native_draw_line", native_draw_line, 8);
80
+ }
@@ -0,0 +1,11 @@
1
+ #ifndef QRTOOLS_IMAGE
2
+ #define QRTOOLS_IMAGE
3
+
4
+ #include <qrtools.h>
5
+
6
+ extern VALUE cQRToolsImage;
7
+
8
+ void init_qrtools_image();
9
+ VALUE QRTools_Wrap_Image(IplImage * image);
10
+
11
+ #endif
@@ -0,0 +1,36 @@
1
+ #include <qrtools_qrcode.h>
2
+
3
+ static VALUE width(VALUE self)
4
+ {
5
+ QRcode * code;
6
+ Data_Get_Struct(self, QRcode, code);
7
+ return INT2NUM(code->width);
8
+ }
9
+
10
+ static VALUE version(VALUE self)
11
+ {
12
+ QRcode * code;
13
+ Data_Get_Struct(self, QRcode, code);
14
+ return INT2NUM(code->version);
15
+ }
16
+
17
+ static VALUE data(VALUE self)
18
+ {
19
+ QRcode * code;
20
+ Data_Get_Struct(self, QRcode, code);
21
+
22
+ return rb_str_new(code->data, code->width * code->width);
23
+ }
24
+
25
+ VALUE cQRToolsQRCode;
26
+ void init_qrtools_qrcode()
27
+ {
28
+ VALUE qrtools = rb_define_module("QRTools");
29
+ VALUE klass = rb_define_class_under(qrtools, "QRCode", rb_cObject);
30
+
31
+ cQRToolsQRCode = klass;
32
+
33
+ rb_define_method(klass, "width", width, 0);
34
+ rb_define_method(klass, "version", version, 0);
35
+ rb_define_method(klass, "data", data, 0);
36
+ }
@@ -0,0 +1,10 @@
1
+ #ifndef QRTOOLS_QRCODE
2
+ #define QRTOOLS_QRCODE
3
+
4
+ #include <qrtools.h>
5
+
6
+ extern VALUE cQRToolsQRCode;
7
+
8
+ void init_qrtools_qrcode();
9
+
10
+ #endif
@@ -0,0 +1,58 @@
1
+ #include <qrtools_ui_camera.h>
2
+
3
+ static void deallocate(CvCapture * capture)
4
+ {
5
+ if(capture) cvReleaseCapture(&capture);
6
+ }
7
+
8
+ static VALUE allocate(VALUE klass)
9
+ {
10
+ return Data_Wrap_Struct(klass, NULL, deallocate, NULL);
11
+ }
12
+
13
+ static VALUE start(VALUE self)
14
+ {
15
+ VALUE index = rb_iv_get(self, "@camera_number");
16
+ CvCapture * capture = cvCreateCameraCapture(NUM2INT(index));
17
+ DATA_PTR(self) = capture;
18
+ return self;
19
+ }
20
+
21
+ static VALUE stop(VALUE self)
22
+ {
23
+ CvCapture * capture;
24
+ Data_Get_Struct(self, CvCapture, capture);
25
+ if(capture) {
26
+ cvReleaseCapture(&capture);
27
+ DATA_PTR(self) = NULL;
28
+ }
29
+ return self;
30
+ }
31
+
32
+ static VALUE capture(VALUE self)
33
+ {
34
+ CvCapture * capture;
35
+ Data_Get_Struct(self, CvCapture, capture);
36
+
37
+ IplImage * cam = cvQueryFrame(capture);
38
+ if(cam)
39
+ return QRTools_Wrap_Image(cvCloneImage(cam));
40
+
41
+ return Qnil;
42
+ }
43
+
44
+ VALUE cQRToolsUICamera;
45
+
46
+ void init_qrtools_ui_camera()
47
+ {
48
+ VALUE qrtools = rb_define_module("QRTools");
49
+ VALUE ui = rb_define_module_under(qrtools, "UI");
50
+ VALUE klass = rb_define_class_under(ui, "Camera", rb_cObject);
51
+
52
+ cQRToolsUICamera = klass;
53
+ rb_define_alloc_func(klass, allocate);
54
+ rb_define_method(klass, "capture", capture, 0);
55
+
56
+ rb_define_private_method(klass, "native_start", start, 0);
57
+ rb_define_private_method(klass, "native_stop", stop, 0);
58
+ }
@@ -0,0 +1,10 @@
1
+ #ifndef QRTOOLS_UI_CAMERA
2
+ #define QRTOOLS_UI_CAMERA
3
+
4
+ #include <qrtools.h>
5
+
6
+ extern VALUE cQRToolsUICamera;
7
+
8
+ void init_qrtools_ui_camera();
9
+
10
+ #endif
@@ -0,0 +1,40 @@
1
+ #include <qrtools_ui_window.h>
2
+
3
+ static VALUE show(VALUE self)
4
+ {
5
+ VALUE name = rb_iv_get(self, "@name");
6
+ cvNamedWindow(StringValuePtr(name), 1);
7
+ return self;
8
+ }
9
+
10
+ static VALUE hide(VALUE self)
11
+ {
12
+ VALUE name = rb_iv_get(self, "@name");
13
+ cvDestroyWindow(StringValuePtr(name));
14
+ return self;
15
+ }
16
+
17
+ static VALUE display(VALUE self, VALUE image)
18
+ {
19
+ VALUE name = rb_iv_get(self, "@name");
20
+
21
+ IplImage * src;
22
+ Data_Get_Struct(image, IplImage, src);
23
+ cvShowImage(StringValuePtr(name), src);
24
+ return self;
25
+ }
26
+
27
+ VALUE cQRToolsUIWindow;
28
+
29
+ void init_qrtools_ui_window()
30
+ {
31
+ VALUE qrtools = rb_define_module("QRTools");
32
+ VALUE ui = rb_define_module_under(qrtools, "UI");
33
+ VALUE klass = rb_define_class_under(ui, "Window", rb_cObject);
34
+
35
+ cQRToolsUIWindow = klass;
36
+
37
+ rb_define_method(klass, "show", show, 0);
38
+ rb_define_method(klass, "hide", hide, 0);
39
+ rb_define_method(klass, "display", display, 1);
40
+ }
@@ -0,0 +1,10 @@
1
+ #ifndef QRTOOLS_UI_WINDOW
2
+ #define QRTOOLS_UI_WINDOW
3
+
4
+ #include <qrtools.h>
5
+
6
+ extern VALUE cQRToolsUIWindow;
7
+
8
+ void init_qrtools_ui_window();
9
+
10
+ #endif
@@ -0,0 +1,42 @@
1
+ /////////////////////////////////////////////////////////////////////////
2
+ //
3
+ // qrtypes.h --a part of libdecodeqr
4
+ //
5
+ // Copyright(C) 2007 NISHI Takao <zophos@koka-in.org>
6
+ // JMA (Japan Medical Association)
7
+ // NaCl (Network Applied Communication Laboratory Ltd.)
8
+ //
9
+ // This is free software with ABSOLUTELY NO WARRANTY.
10
+ // You can redistribute and/or modify it under the terms of LGPL.
11
+ //
12
+ // $Id: qrtypes.h 36 2007-02-21 23:22:03Z zophos $
13
+ //
14
+ #ifndef __QR_TYPES__
15
+ #define __QR_TYPES__
16
+
17
+ #define QR_LEVEL_M 0
18
+ #define QR_LEVEL_L 1
19
+ #define QR_LEVEL_H 2
20
+ #define QR_LEVEL_Q 3
21
+
22
+ #define QR_MODE_NUMBER 1
23
+ #define QR_MODE_ALPHABET 2
24
+ #define QR_MODE_JOINT 3
25
+ #define QR_MODE_8BIT 4
26
+ #define QR_MODE_FNC1_1 5
27
+ #define QR_MODE_ECI 7
28
+ #define QR_MODE_KANJIS 8
29
+ #define QR_MODE_FNC1_2 9
30
+
31
+ typedef void * QrDecoderHandle;
32
+ typedef struct{
33
+ int model;
34
+ int version;
35
+ int level;
36
+ //int mode; //not supported yet
37
+ //int eci_mode; //not supported yet
38
+ int charactor_size;
39
+ int byte_size;
40
+ } QrCodeHeader;
41
+
42
+ #endif