카메라 어플 안에서 이미지를 돌리려고
바이트 배열(카메라 사진 데이터)을 비트맵으로 전환
↓
비트맵을 회전
↓
회전된 비트맵을 배열로 다시 전환
↓
저장
으로 하려고 코드를 짜는데 DDMS에서 저장된 이미지를 보니 이미지는 있는데 크기가 0입니다.
코드를 이곳 저곳에서 뜯어와서 약간 더러워도 이해해 주세요..
(하이라이터가 동작이 안됩니다. -모두 첫번째 행으로 나옴-
public Bitmap byteArrayToBitmap( byte[] $byteArray ) { //바이트 배열을 비트맵으로 전환
Bitmap bitmap = BitmapFactory.decodeByteArray( $byteArray, 0, $byteArray.length );
rotate(bitmap, 90);
return bitmap;
}
public static Bitmap rotate(Bitmap b, int degrees) { //비트맵 파일을 회전시키기
if ( degrees != 0 && b != null ) {
Matrix m = new Matrix();
m.setRotate( degrees, (float) b.getWidth() / 2, (float) b.getHeight() / 2 );
try {
Bitmap b2 = Bitmap.createBitmap( b, 0, 0, b.getWidth(), b.getHeight(), m, true );
if (b != b2) {
b.recycle();
b = b2;
}
} catch (OutOfMemoryError ex) {
// 메모리가 없을 때 오리지날 비트맵으로.
}
}
return b;
}
public byte[] bitmapToByteArray( Bitmap $bitmap ) { //바이트 배열을 다시 비트맵으로
ByteArrayOutputStream stream = new ByteArrayOutputStream() ;
$bitmap.compress( CompressFormat.JPEG, 100, stream) ;
byte[] byteArray = stream.toByteArray() ;
return byteArray ;
}
public int SaveImage() {//이미지 저장
int ret = 0;
try {
File path = new File(mFileimageRoute+getRealFileName()+".jpg");
FileOutputStream fos = new FileOutputStream(path);
Bitmap bitmap = byteArrayToBitmap(mImageData[0]);//비트맵으로 변환
rotate(bitmap, 90);//회전
mImageData[0] = bitmapToByteArray(bitmap);
fos.write(mImageData[0]);
fos.flush();
fos.close();
System.gc();
bitmap.recycle();//비트맵 리사이클
}
catch (FileNotFoundException fne)
{
Log.e("writing and scanning image ", fne.toString());
fne.printStackTrace();
ret = -1;
}
catch (IOException ioe)
{
Log.e("writing and scanning image ", ioe.toString());
ioe.printStackTrace();
ret = -1;
} catch (Exception e)
{
ret = -1;
}
return ret;
}