gpt4 book ai didi

java - 如何在Android中可靠地拍照?

转载 作者:行者123 更新时间:2023-12-02 00:21:28 24 4
gpt4 key购买 nike

我正在尝试在 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;
}
}

它本身似乎有效,例如不会崩溃。我进入 Bitmap 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 中呢?

关于java - 如何在Android中可靠地拍照?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10886477/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com