我有这段代码:
@Override
public void onPictureTaken(byte[] data, Camera camera) {
File pictureFileDir = getDir();
if (!pictureFileDir.exists() && !pictureFileDir.mkdirs()) {
Toast.makeText(context, "Dir not created. (ERR#GRA1)", Toast.LENGTH_LONG).show();
return;
}
SimpleDateFormat dateFormat = new SimpleDateFormat("dd_MM_yyyy_HH_mm_ss", Locale.US);
String date = dateFormat.format(new Date());
photoFile = acao + android_id + "_" + date + "_" + coordenadas + ".jpg";
String filename = pictureFileDir.getPath() + File.separator + photoFile;
File pictureFile = new File(filename);
try {
FileOutputStream fos = new FileOutputStream(pictureFile);
fos.write(data);
fos.close();
Toast.makeText(context, "Saved.", Toast.LENGTH_SHORT).show();
Login.totalTiradas++;
} catch (Exception error) {
Toast.makeText(context, "Not saved. (ERR#GRA2)", Toast.LENGTH_LONG).show();
}
camera2.startPreview();
aviso.setVisibility(View.INVISIBLE);
String stringUrl = "111.222.333.444";
NetworkInfo networkInfo = connMgr.getActiveNetworkInfo();
if (networkInfo != null && networkInfo.isConnected()) {
new conectaFTP().execute(stringUrl);
} else {
Toast.makeText(context, "Fail. Image not sent. (ERR#CON1)", Toast.LENGTH_LONG).show();
}
}
将照片保存到SD卡,调用AsyncTask并上传图片。一切正常。
我需要调整图片大小。在保存之前或上传之前,任何人都对我有好处。
我无法使inSampleSize
或Camera.setParameters
正常工作(我的不好,当然),或者如果这是更好的方法。
答案 0 :(得分:0)
首先从Bitmap
byte[]
Bitmap bmp = BitmapFactory.decodeByteArray(data, 0, data.length);
然后使用Bitmap.createScaledBitmap()
bmp=Bitmap.createScaledBitmap(bmp, width, height, true);
//如果启用了双线性过滤器,则为true
答案 1 :(得分:0)
使用setParameters
:
Camera.Parameters parametro = camera.getParameters();
parametro.setFlashMode("on");
List<Size> sizes = parametro.getSupportedPictureSizes();
for (int i = 0; i < sizes.size(); i++) {
largura = sizes.get(i).width;
altura = sizes.get(i).height;
if (largura >= maxLargura) { break; }
}
parametro.setPictureSize(largura, altura);
camera.setParameters(parametro);