55ddbf7b31e2f70c64a89339f37ef18c80c20f1a
[platform/framework/native/vision.git] / src / FUixVision_QrCodeGeneratorImpl.cpp
1 //
2 // Open Service Platform
3 // Copyright (c) 2013 Samsung Electronics Co., Ltd.
4 //
5 // Licensed under the Apache License, Version 2.0 (the License);
6 // you may not use this file except in compliance with the License.
7 // You may obtain a copy of the License at
8 //
9 //     http://www.apache.org/licenses/LICENSE-2.0
10 //
11 // Unless required by applicable law or agreed to in writing, software
12 // distributed under the License is distributed on an "AS IS" BASIS,
13 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 // See the License for the specific language governing permissions and
15 // limitations under the License.
16 //
17
18 #include "FUixVision_QrCodeGeneratorImpl.h"
19
20 namespace Tizen { namespace Uix { namespace Vision
21 {
22
23 _QrCodeGeneratorImpl::_QrCodeGeneratorImpl(void)
24 {
25
26 }
27
28 _QrCodeGeneratorImpl::~_QrCodeGeneratorImpl(void)
29 {
30
31 }
32
33 bool
34 _QrCodeGeneratorImpl::Encode(const char* message, QrCodeMode mode, QrCodeErrorCorrectionLevel error_level, bool compatibility)
35 {
36     sari2::QRCodeMode sariMode(sari2::QR_MODE_UTF8);
37     sari2::QRCodeErrorCorrectionLevel errorLevel(sari2::QR_ECL_Q);
38
39     switch(mode)
40     {
41     case Tizen::Uix::Vision::QR_CODE_MODE_ALPHANUMERIC:
42         sariMode = sari2::QR_MODE_ALPHANUMERIC; break;
43     case Tizen::Uix::Vision::QR_CODE_MODE_BYTE:
44         sariMode = sari2::QR_MODE_BYTE; break;
45     case Tizen::Uix::Vision::QR_CODE_MODE_UTF8:
46         sariMode = sari2::QR_MODE_UTF8; break;
47     default:
48         break;
49     }
50
51     switch(error_level)
52     {
53     case Tizen::Uix::Vision::QR_CODE_ERROR_CORRECTION_LEVEL_H:
54         errorLevel= sari2::QR_ECL_H;    break;
55     case Tizen::Uix::Vision::QR_CODE_ERROR_CORRECTION_LEVEL_L:
56         errorLevel = sari2::QR_ECL_L;   break;
57     case Tizen::Uix::Vision::QR_CODE_ERROR_CORRECTION_LEVEL_M:
58         errorLevel = sari2::QR_ECL_M;   break;
59     case Tizen::Uix::Vision::QR_CODE_ERROR_CORRECTION_LEVEL_Q:
60         errorLevel = sari2::QR_ECL_Q;   break;
61     default:
62         break;
63     }
64     return __qrCodeGenerator.encode(message, sariMode, errorLevel, compatibility);
65 }
66
67 bool
68 _QrCodeGeneratorImpl::GetSize(int& width, int& height)
69 {
70     return __qrCodeGenerator.getSize((unsigned int&)width, (unsigned int&)height);
71 }
72
73 bool
74 _QrCodeGeneratorImpl::SaveToFile(const Tizen::Base::String& imagepath, Tizen::Media::ImageFormat imageFormat)
75 {
76     int width  = 0;
77     int height = 0;
78
79     if(!GetSize(width, height))
80     {
81         return false;
82     }
83
84     unsigned char* grayBuffer = new unsigned char[(width * height * 3) >> 1];
85     if(!SaveToBuffer(grayBuffer))
86     {
87         return false;
88     }
89
90     memset(grayBuffer + width * height, 128, (width * height) >> 1);
91     Tizen::Media::ImageBuffer imBuf;
92     result r = imBuf.Construct(width, height, Tizen::Media::MEDIA_PIXEL_FORMAT_YUV420P, grayBuffer, (width * height * 3) >> 1);
93     delete[] grayBuffer;
94     if(IsFailed(r))
95     {
96         return false;
97     }
98
99     r = imBuf.EncodeToFile(imagepath, imageFormat, true);
100     if(IsFailed(r))
101     {
102         return false;
103     }
104
105     return true;
106 }
107
108 bool
109 _QrCodeGeneratorImpl::SaveToBuffer(unsigned char* image)
110 {
111     return __qrCodeGenerator.saveToBuffer(image);
112 }
113
114 _QrCodeGeneratorImpl*
115 _QrCodeGeneratorImpl::GetInstance(QrCodeGenerator* pQrGenerator)
116 {
117     return pQrGenerator->__pQrCodeGeneratorImpl;
118 }
119
120 const _QrCodeGeneratorImpl*
121 _QrCodeGeneratorImpl::GetInstance(const QrCodeGenerator* pQrGenerator)
122 {
123     return pQrGenerator->__pQrCodeGeneratorImpl;
124 }
125
126 } } } //Tizen::Uix::Vision