3
我有一個攝像頭活動。我的活動將拍攝一張照片,然後我有一個AsyncTask將照片保存到設備。這裏是我的代碼:Android如何以字節數組格式調整圖像
class SavePhotoTask extends AsyncTask<byte[], String, String> {
private ProgressDialog dialog;
// protected Context applicationContext;
@Override
public void onPreExecute() {
dialog = new ProgressDialog(CameraPreviewActivity.this);
dialog.setMessage("gravando...");
dialog.show();
}
@Override
protected String doInBackground(byte[]... jpeg) {
try {
int i =jpeg[0].length;
System.out.println("byte array size"+i);
String timeStamp = new SimpleDateFormat("yyyyMMdd-HHmmss").format(new Date());
Random generator2 = new Random(10000);
int r=generator2.nextInt(99999);
File cacheDir = getDir(DIRECTORIO, Context.MODE_PRIVATE);
String filename = timeStamp+"-" +r+ ".jpg";
File file = new File(cacheDir, filename);
FileOutputStream stream = new FileOutputStream(file);
//FileOutputStream fos = new FileOutputStream(photo.getPath());
stream.write(jpeg[0]);
stream.close();
long t=file.length();
System.out.println("file size"+t);
} catch (java.io.IOException e) {
Log.e("PictureDemo", "Exception in photoCallback", e);
}
return (null);
}
@Override
protected void onPostExecute(String result) {
this.dialog.cancel();
}
}
(這個類是從一個在CommonsWare書(高級Android開發)
所以SavePhotoTask接收的字節數組格式的圖像(字節[]的修改),並保存它在一個文件中 我想要做的是調整它的大小(小於150K),然後保存它,如果可能的話。我知道我可以創建一個位圖,但有沒有辦法直接壓縮字節數組?我可以使用的類。
這是調整位圖大小的代碼:
Bitmap thumbnail=BitmapFactory.decodeByteArray(jpeg[0], 0, jpeg[0].length)
thumbnail.compress(Bitmap.CompressFormat.JPEG, 100, stream);
stream.close();
long t=file.length();
if(t>Constants.MAX_FILE_SIZE){
stream = new FileOutputStream(file);
thumbnail.compress(Bitmap.CompressFormat.JPEG, 75, stream);
stream.close();
t=file.length();
int i=50;
while(t>Constants.MAX_FILE_SIZE && i>=0){
stream = new FileOutputStream(file);
thumbnail.compress(Bitmap.CompressFormat.JPEG, i, stream);
stream.close();
i=i-5;
t=file.length();
}
}
有沒有一種方法可以創建更好的東西,當然還有使用最少的內存資源。非常感謝