반응형
ㅇ 이미지 sdcard에 코드로 저장한 후에 갤러리 갱신 안되는 문제
미디어 스캐너를 이용해야 한다. sd카드에 저장하면 이미지 스캐너가 실행되기전까지는 넣은게 갱신되지않는다
sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://"+ Environment.getExternalStorageDirectory())));
o 비트맵(Bitmap)을 파일(File)로 저장하는 함수
private void SaveBitmapToFileCache(Bitmap bitmap, String strFilePath) { File fileCacheItem = new File(strFilePath); OutputStream out = null; try { fileCacheItem.createNewFile(); out = new FileOutputStream(fileCacheItem); bitmap.compress(CompressFormat.JPEG, 100, out); } catch (Exception e) { e.printStackTrace(); } finally { try { out.close(); sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://"+ Environment.getExternalStorageDirectory()))); } catch (IOException e) { e.printStackTrace(); } } }
o 마스크를 이용하는 방법
Bitmap result = Bitmap.createBitmap(m_bmp.getWidth(), m_bmp.getHeight(), Bitmap.Config.ARGB_8888); Canvas c = new Canvas(result); //화면에 뿌릴 비트맵 c.drawBitmap(m_bmp, 0, 0, null); //맨 밑에 이미지 그리기 Paint paint2 = new Paint(); paint2.setFilterBitmap(false); paint2.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_OUT) ); //색이 칠해진곳만 불투명? //DST_IN으로 변경시 색이 칠해진 부분만 투명 c.drawBitmap(m_Maskbmp, 0, 0, paint2); // 전경 이미지 위에 마스크 이미지 그림 paint2.setXfermode(null); canvas.drawBitmap(result, srcRect, dstRect, null); // 배경 위에 완성된 전경 이미지를 그림
o 이미지 파일 mutable로 여는 함수
private Bitmap LoadmutableBitmap(String strFilePath) { Bitmap bmp; Bitmap oriImage = BitmapFactory.decodeFile(strFilePath); bmp = Bitmap.createBitmap(oriImage.getWidth(),oriImage.getHeight(), Bitmap.Config.ARGB_8888); Canvas mutableBitmapCanvas = new Canvas(bmp); mutableBitmapCanvas.drawBitmap(oriImage,0,0,null); return bmp; }
o 파일 복사 함수
private boolean copyFile(File file , String save_file){ boolean result; if(file!=null&&file.exists()) { try { FileInputStream fis = new FileInputStream(file); FileOutputStream newfos = new FileOutputStream(save_file); int readcount=0; byte[] buffer = new byte[1024]; while((readcount = fis.read(buffer,0,1024))!= -1) { newfos.write(buffer,0,readcount); LogMessage("Copy : " + save_file); } newfos.close(); fis.close(); sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://"+ Environment.getExternalStorageDirectory()))); } catch (Exception e) { e.printStackTrace(); } result = true; } else { result = false; } return result; }
URI는 어떤 형태냐면,
content://media/external/images/media/637
이런 형태이고
절대 경로는 /mnt/sdcard/Camera/SH130409-161030.jpg
이렇게 생겼다
o 절대 경로 -> URI 변환.
//imageUrl : 절대 경로를 갖음 String 변수 Uri fileUri = Uri.parse(imageUrl); String filePath = fileUri.getPath(); Cursor c = getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,null,"_data ='" + filePath + "'",null,null); c.moveToNext(); int id = c.getInt(0); Uri uri = ContentUris.withAppendedId(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,id); Log.e("URI",uri.toString());
o 비트맵에 GPS 정보 함께 저장하기 관련 정보 링크 : http://android-er.blogspot.kr/2011/04/update-gps-tag-using.html
private void SaveBitmapToFileCache(Bitmap bitmap, String strFilePath) { File fileCacheItem = new File(strFilePath); OutputStream out = null; try { fileCacheItem.createNewFile(); out = new FileOutputStream(fileCacheItem); bitmap.compress(CompressFormat.JPEG, 100, out); } catch (Exception e) { e.printStackTrace(); } finally { try { out.close(); ExifInterface ef = new ExifInterface(strFilePath); if(ef != null) { Log.e("URI",strFilePath); ef.setAttribute(ExifInterface.TAG_GPS_LATITUDE, "22/1,21/1,299295/32768"); ef.setAttribute(ExifInterface.TAG_GPS_LONGITUDE,"114/1,3/1,207045/4096"); ef.setAttribute(ExifInterface.TAG_GPS_LATITUDE_REF, "N"); ef.setAttribute(ExifInterface.TAG_GPS_LONGITUDE_REF, "E"); //Log.e("URI DateTime",ef.getAttribute(ExifInterface.TAG_DATETIME));; ef.saveAttributes(); } sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://"+ Environment.getExternalStorageDirectory()))); } catch (IOException e) { e.printStackTrace(); } } }
반응형
'Programming > Android' 카테고리의 다른 글
안드로이드 UI & Layout (0) | 2013.04.12 |
---|---|
안드로이드 Thread (0) | 2013.04.12 |
[안드로이드] 오류 해결 (0) | 2012.07.19 |
[안드로이드, Eclipse(이클립스)] OpenCV 연동 (0) | 2012.07.18 |
[개발환경] 안드로이드 Opencv 연동 (3) | 2012.04.12 |