SPRING :: NOTE

[ANDROID] 카메라로 찍은 Bitmap에 텍스트를 추가하여 저장하기 본문

Development Language/JAVA · ANDROID

[ANDROID] 카메라로 찍은 Bitmap에 텍스트를 추가하여 저장하기

RAYZIE 2017. 6. 16. 19:14
반응형

해외 사이트를 엄청 뒤적뒤적 거렸다.

결론은 텍스트뷰(TextView)는 적용이 안되는듯 하다. (캡쳐 방식으로 가야할지도.?)

일단 카메라로 받아온 Bitmap이 필요하다.(surfaceview)

surfafceview로 Bitmap을 받아오는건 다른 포스팅에서 작성 후 링크를 걸도록 하겠다.

bitmap에 canverse와 paint를 사용하여 이미지위에 텍스트를 추가한 후 저장한다.

결과 이미지


    PictureCallback myPictureCallback_JPG = new PictureCallback(){
        @Override

        public void onPictureTaken(byte[] arg0, Camera arg1) {

            // TODO Auto-generated method stub

            Bitmap src = BitmapFactory.decodeByteArray(arg0, 0, arg0.length);

            Bitmap dest = Bitmap.createBitmap(src.getWidth(), src.getHeight(), Bitmap.Config.ARGB_8888);
            /*
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            String dateTime = sdf.format(Calendar.getInstance().getTime()); // reading local time in the system
            */

            String strTime, stCovTime;
            strTime = PSH.utc2kst(String.valueOf(GPSpos.time));
            stCovTime = "20"+GPSpos.utcDate.substring(4,6) 
                                     +"-"+GPSpos.utcDate.substring(2,4) +"-"+GPSpos.utcDate.substring(0,2) +" " 
                                     + strTime.substring(0,2) +":"+ strTime.substring(2,4) +":"+ strTime.substring(4,6);

            String stTime = "UTC Time : " + stCovTime;
            String stLat = "Latitude : " + String.valueOf(GPSpos.lat);
            String stLon = "Longitude : " + String.valueOf(GPSpos.lon);
            String stAlt = "Altitude : " + String.valueOf(GPSpos.altitude);
            String stSat = "SV' Tracking : " + String.valueOf(GPSpos.satView);
            String stHdop = "HDOP : " + String.valueOf(GPSpos.HDOP);
            String stVdop = "VDOP : " + String.valueOf(GPSpos.VDOP);
            String stPdop = "VDOP : " + String.valueOf(GPSpos.PDOP);

            Canvas cs = new Canvas(dest);
            Paint tPaint = new Paint();
            tPaint.setTextSize(20);
            tPaint.setTypeface(Typeface.create(Typeface.DEFAULT, Typeface.BOLD));
            tPaint.setColor(Color.BLACK);
            tPaint.setStyle(Paint.Style.FILL);
            cs.drawBitmap(src, 0f, 0f, null);
            float height = tPaint.measureText("yY");
            cs.drawText(strTime, 20f, height+20f, tPaint);
            cs.drawText(strTime, 20f, height+40f, tPaint);
            cs.drawText(strTime, 20f, height+60f, tPaint);
            cs.drawText(strTime, 20f, height+80f, tPaint);
            //cs.drawText(stSat, 20f, height+100f, tPaint);
            //cs.drawText(stHdop, 20f, height+120f, tPaint);
            //cs.drawText(stVdop, 20f, height+140f, tPaint);
            //cs.drawText(stPdop, 20f, height+160f, tPaint);

            String stDir = "Dusi";
            final String strSDpath = Environment.getExternalStorageDirectory().getAbsolutePath();
            final File myDir = new File(strSDpath + "/Dusi");

            //File sdCardPath = Environment.getExternalStorageDirectory();
            //File dirs = new File(Environment.getExternalStorageDirectory(), stDir);

            if (!myDir.exists())
            { // 원하는 경로에 폴더가 있는지 확인
                myDir.mkdirs(); // 폴더 생성
            }

            try {

                dest.compress(Bitmap.CompressFormat.PNG, 100, new FileOutputStream(new File(myDir.getPath() + "/" + strTime + ".png")));
                sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.parse("file://"+ myDir.getPath() + "/" + strTime + ".png")));
                PSH.showToast(MainActivity.this, "IMG SAVE :: " + stDir + strTime + ".png");

            } catch (FileNotFoundException e)
            {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            
            mbtTakePic.setEnabled(true);
            camera.startPreview();

        }};


+ 추가

- mbtTakePick은 private Button mbtTakePick; 변수입니다.

- drawText 클래스는 android canvas class 도큐먼트 참고하시면, 더욱 상세하게 설명되어있습니다. 

Android Canvas Class -> drawText Function Link

포스팅이 유용하였다면, 아래 공감버튼을 한번씩 눌러주세요.

반응형
Comments