Java 如何在Android中可靠地拍照?
我正在尝试在Android应用程序中拍摄照片,将其转换为JPEG格式,然后将其上传到web服务。到目前为止,我得到了以下信息:Java 如何在Android中可靠地拍照?,java,android,android-camera,Java,Android,Android Camera,我正在尝试在Android应用程序中拍摄照片,将其转换为JPEG格式,然后将其上传到web服务。到目前为止,我得到了以下信息: private static final int CAMERA_REQUEST = 1888; private void TakePhoto() { Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); startActivityForRes
private static final int CAMERA_REQUEST = 1888;
private void TakePhoto() {
Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(cameraIntent, CAMERA_REQUEST);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode) {
case CAMERA_REQUEST:
Bitmap photo = (Bitmap) data.getExtras().get("data");
ByteArrayOutputStream bos = new ByteArrayOutputStream();
photo.compress(Bitmap.CompressFormat.JPEG, 90, bos);
byte [] bitmapData = bos.toByteArray();
char [] dataAsChar = new String(bitmapData ).toCharArray();
URL url = new URL("http://www.foo.com/bar);
URLConnection conn = url.openConnection();
conn.setDoOutput(true);
conn.setRequestProperty("Content-Type", "application/octet-stream");
OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream());
wr.write(dataAsChar);
wr.flush();
// Get the response
BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String line;
while ((line = rd.readLine()) != null) {
// Process line...
}
wr.close();
rd.close();
break;
}
}
机器本身似乎工作正常,例如没有崩溃。我进入位图photo
变量。然后我使用ByteArrayOutputStream压缩它,它变成大约5103字节(在缓冲区中)。然后我将其转换为一个char数组(以便发送),char数组变成4758个元素。不确定原因(可能是此行char[]dataAsChar=newstring(data).tocharray();
)。当然,一旦图像转移到另一边,它就被破坏了
我错过了什么
编辑。根据@digitalJoel的建议,我扔掉了OutputStreamWriter,取而代之的是
OutputStream os = conn.getOutputStream();
os.write(data);
新字符串(bitmapData).toCharray()
对我来说似乎是个非常糟糕的主意。我认为你不能指望JPEG中的所有字节都被塞进一个字符串而不发生一些损坏。那么,为什么不直接将字节写入OutputStream而不是将其包装到OutputStreamWriter中呢?新字符串(bitmapData)。ToCharray()
对我来说似乎是个非常糟糕的主意。我认为你不能指望JPEG中的所有字节都被塞进一个字符串而不发生一些损坏。那么,为什么不直接将字节写入OutputStream,而不是将其包装到OutputStreamWriter中呢?在创建获取字符数组的字符串时,您没有指定编码方法。Android的默认字符串编码方法是否可以将多个原始字节转换为单个逻辑字符
即使不是,这也是为什么(正如@digitaljoel所说)构建一个字符串来获取字符数组并不是一个好主意。当您创建从中获取字符数组的字符串时,您没有指定编码方法。Android的默认字符串编码方法是否可以将多个原始字节转换为单个逻辑字符 即使不是,这也是为什么(正如@digitaljoel所说)构建字符串来获取字符数组并不是最好的主意