繁体   English   中英

如何在Android中可靠地拍照?

[英]How to reliably take a photo in Android?

我正在尝试在Android应用中拍照,然后将其转换为JPEG,然后将其上传到网络服务。 到目前为止,我得到了以下内容:

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 = new String(data).toCharArray(); )。 当然,一旦图像移到另一侧,它就会损坏。

我在这里想念什么?

编辑。 根据@digitalJoel的建议,我放弃了OutputStreamWriter并替换为

OutputStream os = conn.getOutputStream();
os.write(data);

new String(bitmapData ).toCharArray()对我来说似乎是个坏主意。 我不认为您可以期望JPEG中的所有字节都被塞进字符串而不会发生任何损坏。 那么,为什么不只将字节写入OutputStream而不是将其包装在OutputStreamWriter中呢?

创建要从其获取char数组的String时,未指定编码方法。 Android的默认String编码方法可以将多个原始字节转换为单个逻辑字符吗?

即使不是这样,这种事情也是为什么(如@digitaljoel所说)构建一个String以获得一个字符数组并不是最好的主意。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM