반응형
ㅇ 이미지 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 |
| [안드로이드] 오류 해결 (1) | 2012.07.19 |
| [안드로이드, Eclipse(이클립스)] OpenCV 연동 (0) | 2012.07.18 |
| [개발환경] 안드로이드 Opencv 연동 (3) | 2012.04.12 |