이번 주제는 QR 코드.
요즘은 기본적으로 QR code를 인식하는 다양한 방법 혹은 어플들이 있으니까, 나도 해봐야지.

우리에게 필요한 준비물은 Android SDK, Eclipse, QR code library 정도.

그리 잘 만든 코드는 아니지만 일단 스타드~

우선 QR code library 수집을 위해서 위대하신 우리 Google 느님에게 검색, 검색~
그리고 zxing 이란 녀석을 사용하기로 결정!!
URL : https://github.com/zxing

근데 이거 까보니 너무 많음 바코드도 있고... 기타 등등.. 그래서 귀찮으므로 QR 코드만 따로 빼서 새로 만듬
그리고 생각해보니 code 위주로 작성하는데 복사를 못하게 하면 난감해서 복사방지 풀음...


QR 코드 생성해서 ImageView에 보이도록 하는 부분.

    private class CreateQRCodeAsyncTask extends AsyncTask<String, Void, Bitmap> {
        // QR code 색상
        private static final int WHITE = 0xFFFFFFFF;
        private static final int BLACK = 0xFF000000;

        // QR code bitmap 크기 비율
        private static final float REDUCE_RATIO = 0.8f;

        // 타겟 image view
        private ImageView mTagetView;

        // 화면 크기
        private Point mDisplaySize;

        public CreateQRCodeAsyncTask (Imageview taget, Point displaySize) {
            mTagetView = taget;
            mDisplaySize = displaySize;
        }

        @Override
        protected Bitmap doInBackground(String... params) {
            // zxing library class (QR code writer)
            QRCodeWriter qrCodeWriter = new QRCodeWriter();

            try {
                // 화면 비율 대비 QR 코드 이미지 크기 조정
                int temp = mDisplaySize.x;

                if (temp > mDisplaySize.y) {
                    temp = mDisplaySize.y;
                }

                int dWidth = (int) ((float) temp * REDUCE_RATIO);
                int dHeight = (int) ((float) temp * REDUCE_RATIO);

                // QR code로 인코딩해서 비트맵 array 정보를 얻어옴 zxing 자체 class임
                BitMatrix result = qrCodeWriter.encode(params[0],
                        BarcodeFormat.QR_CODE, dWidth, dHeight);
                int width = result.getWidth();
                int height = result.getHeight();

                // Bitmap pixel array
                int[] pixels = new int[width * height];

                // BitMatrix 정보를 바탕으로 bitmap 픽셀 array 에 color 입력
                // All are 0, or black, by default
                for (int y = 0; y < height; y++) {
                    int offset = y * width;
                    for (int x = 0; x < width; x++) {
                        pixels[offset + x] = result.get(x, y) ? BLACK : WHITE;
                    }
                }

                // pixel array 크기의 bitmap 생성
                Bitmap bitmap = Bitmap.createBitmap(width, height,
                        Bitmap.Config.ARGB_8888);

                // bitmap에 pixel 정보 입력
                bitmap.setPixels(pixels, 0, width, 0, 0, width, height);

                return bitmap;
            } catch (Exception e) {
                return null;
            }
        }

        @Override
        protected void onPostExecute(Bitmap result) {
            if (result != null && mTagetView != null) {
                // image view 에 QR code 업데이트
                mTagetView.setImageBitmap(result );
                mTagetView.invalidate();
            }
        }
    }   

다음편에 스캔하는 code 설명을 이어가 겠음...





'Android' 카테고리의 다른 글

Sharedpreferences 에 관하여  (0) 2015.04.04
Android QR code scan 부분  (0) 2014.09.21
Android AsyncTask 함정 카드  (1) 2014.08.03
Android Custom Widget 만들기 7편  (0) 2012.04.12
Android Custom Widget 만들기 6편  (0) 2012.04.12

+ Recent posts