2014-04-19 3 views
1

어떻게 안드로이드에 yuv 이미지 크기를 조정할 수 말해주십시오.안드로이드에서 Yuv 이미지 크기를 조정하는 방법

ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
mCameraView.myuvImage.compressToJpeg(new Rect(0, 0, mCameraView.myuvImage.getWidth(), mCameraView.myuvImage.getHeight()), 100, baos); 

compressToJpeg 메서드는 yuv 이미지를 jpeg로 변환합니다. 그러나 쓸 때 압축 된 JPEG로 변환 된 JPEG의 크기를 조정하지 않습니다.

mCameraView.myuvImage.compressToJpeg(new Rect(0, 0, mCameraView.myuvImage.getWidth(), mCameraView.myuvImage.getHeight()), 50, baos); 
+0

크기 조정이 이클립스 또는 이미지 압축에 어떤 영향을 줍니까? 크기를 조정하기 위해 이클립스 또는 이미지 압축이 필요하지 않습니다. – Theolodis

답변

0

가장 쉬운 방법은 크기 조정 된 비트 맵을 만드는 것입니다. 당신은 크기를 조정할 수 있습니다, 그리고

ByteArrayOutputStream out = new ByteArrayOutputStream(); 
YuvImage yuvImage = new YuvImage(mCameraView.myuvImage, PictureFormat.NV21, width, height, null); 
yuvImage.compressToJpeg(new Rect(0, 0, width, height), 50, out); 
byte[] imageBytes = out.toByteArray(); 
Bitmap image = BitmapFactory.decodeByteArray(imageBytes, 0, imageBytes.length); 

: 첫째, 비트 맵 이미지로 비트 맵 변환

내가 찾은 무엇
Bitmap resized = Bitmap.createScaledBitmap(image, newWidth, newHeight, true); 
+0

스케일링 된 Bitmap이 필요 없다. 확장형 YuvImage –

+0

@ user2050649가 YUVImage 용 생성자에서 필요하다. 너비와 높이에 대한 매개 변수가있다. 새로운 YuvImage (mCamera.myuvImage, pictureformat, newWidth, newHeight, ...) – AmmarCSE

+0

@ user2050649, 이것을 사용해보세요. http://stackoverflow.com/questions/5960247/convert-bitmap-array-to-yuv-ycbcr-nv21 – AmmarCSE

0

아마 정말 좋은 방법이 아니라 그 이상 근무 나 :

YuvImage image = new YuvImage(data, ImageFormat.NV21, size.width, size.height, null); //create YuvImage instance with initial size 
ByteArrayOutputStream bao = new ByteArrayOutputStream(); 
image.compressToJpeg(new Rect(0, 0, image.getWidth(), image.getHeight()), jpegQuality, bao); 

외부에 설정된 값이 aspect입니다. 이 값은 승수를 나타내며, 규모를 얼마나 줄입니까? aspect == 1 인 경우 동일한 해상도를 사용합니다. aspect == 2 경우 우리는 2 이미지 해상도를 나누는 등 경우에만 필요합니다 스케일링 경우 aspect != 1

if (aspect != 1) { 
    int newWidth = image.getWidth()/aspect; 
    int newHeight = image.getHeight()/aspect; 
    byte[] scaledBitmapData = bitmapToByteArray(createScaledBitmap(bao.toByteArray(), newWidth, newHeight)); 
    bao = new ByteArrayOutputStream(scaledBitmapData.length); 
    bao.write(scaledBitmapData, 0 , scaledBitmapData.length); 

    image.compressToJpeg(new Rect(0, 0, newWidth, newHeight), jpegQuality, bao); 
} 

유틸리티 방법 :

public static Bitmap createScaledBitmap(byte[] bitmapAsData, int width, int height) { 
    Bitmap bitmap = BitmapFactory.decodeByteArray(bitmapAsData, 0, bitmapAsData.length); 
    return createScaledBitmap(bitmap, width, height); 
} 

public static Bitmap createScaledBitmap(Bitmap bitmap, int width, int height) { 
    return Bitmap.createScaledBitmap(bitmap, width, height, true); 
} 

public static byte[] bitmapToByteArray(Bitmap bitmap) { 
    ByteArrayOutputStream blob = new ByteArrayOutputStream(); 
    bitmap.compress(Bitmap.CompressFormat.JPEG, JPEG_QUALITY, blob); 
    return blob.toByteArray(); 
} 

그리고 이것은 트릭을 할해야합니다.

관련 문제