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
포스팅이 유용하였다면, 아래 공감버튼을 한번씩 눌러주세요.
반응형
'Development Language > JAVA · ANDROID' 카테고리의 다른 글
[ANDROID] IMAGE 저장 후 갤러리에 안보이는 현상 (3) | 2017.06.16 |
---|---|
[ANDROID] Error while Launching activity (0) | 2017.06.16 |
[ANDROID] 안드로이드 6.0(마쉬멜로우)이상 퍼미션 (2) | 2017.06.16 |
[AChartEngene] 라이브러리 사용법 (0) | 2016.09.13 |
[java/android] 현재시간 가져오기 (1) | 2016.06.23 |
Comments