Android:Image类转换为Bitmap类

Image类图像有很多格式,根据格式不同转换方式也不同,主要有JPEG格式的转换和YUV格式的转换,网上搜索Image Bitmap转换找到的绝大部分都是指JPEG格式的Image转Bitmap

0.查看自己Image类图像的格式

  • image.getFormat()
    返回一个int型,在android.graphics.ImageFormat中即可对应类型(需要注意int类型和16进制的转换)
    列举常见的:
int代表格式
1JPEG
35YUV_420_888

1.Image类(JPEG格式)的转换

网上资料很多都是reader.acquireLatestImage();来得到一个Image类图像,通常是JPEG格式,通过:

Image image = reader.acquireLatestImage();
ByteBuffer buffer = image.getPlanes()[0].getBuffer();
byte[] bytes = new byte[buffer.capacity()];
buffer.get(bytes);
Bitmap bitmapImage = BitmapFactory.decodeByteArray(bytes, 0, bytes.length, null);

就能实现

2.Image类(YUV_420_888格式)的转换

先贴解决方法的链接,后面空了再来详细分析:
How to convert android.media.Image to bitmap object?

  • 该帖子下的第一个回答是适用于JPEG格式的Image类转Bitmap类
  • 第二个回答是YUV格式的Image类转Bitmap类,该方法亲测可用
  • 9
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 8
    评论
### 回答1: 您好,以下是回答您的问题: 您可以使用Android中的BitmapFactory来将网络图片转换Bitmap对象。具体实现方法如下: ``` // 异步加载图片 private class LoadImageTask extends AsyncTask<String, Void, Bitmap> { @Override protected Bitmap doInBackground(String... params) { String imageUrl = params[0]; Bitmap bitmap = null; try { // 获取图片的字节数组 byte[] data = getImageBytes(imageUrl); if (data != null) { // 将字节数组转换Bitmap对象 bitmap = BitmapFactory.decodeByteArray(data, 0, data.length); } } catch (IOException e) { e.printStackTrace(); } return bitmap; } @Override protected void onPostExecute(Bitmap bitmap) { // 将Bitmap对象显示在ImageView中 imageView.setImageBitmap(bitmap); } } // 获取图片的字节数组 private byte[] getImageBytes(String imageUrl) throws IOException { URL url = new URL(imageUrl); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setRequestMethod("GET"); conn.setConnectTimeout(5000); if (conn.getResponseCode() == 200) { InputStream is = conn.getInputStream(); ByteArrayOutputStream baos = new ByteArrayOutputStream(); byte[] buffer = new byte[1024]; int len; while ((len = is.read(buffer)) != -1) { baos.write(buffer, 0, len); } is.close(); baos.close(); return baos.toByteArray(); } return null; } ``` 以上是一个异步加载图片的示例,其中LoadImageTask是一个继承自AsyncTask的内部,用于在后台线程中获取图片的字节数组并将其转换Bitmap对象。getImageBytes方法用于从网络中获取图片的字节数组,可以根据自己的需求修改。最后在onPostExecute方法中将Bitmap对象显示在ImageView中即可。 ### 回答2: 在Android中,可以通过以下步骤将网络图片转换Bitmap: 1. 首先,确保你已经在AndroidManifest.xml文件中添加了INTERNET权限,以便应用能够访问网络。 2. 创建一个新的线程或使用异步任务来执行网络请求,以防止在主线程上进行网络操作导致应用假死。 3. 使用URL创建一个指向网络图片的URL对象。 4. 打开URL连接并设置连接的一些属性,如超时时间。 5. 通过InputStream来获取网络图片的数据流。 6. 使用BitmapFactory的decodeStream()方法来将输入流解码为Bitmap对象。 下面是示例代码: ```kotlin // 在后台线程中执行网络请求 Thread(Runnable { try { val imageUrl = URL("http://example.com/image.jpg") // 替换为你要加载的图片的URL val connection = imageUrl.openConnection() as HttpURLConnection connection.connectTimeout = 5000 // 设置连接超时时间 connection.readTimeout = 5000 // 设置读取超时时间 val inputStream = connection.inputStream val bitmap = BitmapFactory.decodeStream(inputStream) // 在主线程中更新UI runOnUiThread { imageView.setImageBitmap(bitmap) // imageView是一个用于显示图片的ImageView控件 } // 关闭输入流和连接 inputStream.close() connection.disconnect() } catch (e: Exception) { e.printStackTrace() } }).start() ``` 请注意,上述代码片段只是一个示例,你需要将其中的URL替换为你要加载的图片的URL,并在相应的地方更新UI,如将Bitmap显示在ImageView控件中。 ### 回答3: 在Android中,我们可以通过以下步骤来读取网络图片并将其转换Bitmap。 首先,我们需要在AndroidManifest.xml文件中添加网络访问权限。可以在`<manifest>`标签中添加下面的权限: ``` <uses-permission android:name="android.permission.INTERNET" /> ``` 然后,在我们的活动或碎片中,我们可以使用一个后台线程来处理网络请求,以避免在主线程中执行网络操作,因为这可能会导致应用程序的界面卡顿。在这个后台线程中,我们可以使用Java的网络库(如HttpURLConnection或OkHttp)来获取网络图片的字节数据。 例如,我们可以使用以下代码来获取网络图片的字节数据: ```java URL url = new URL("https://example.com/image.jpg"); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.connect(); InputStream inputStream = connection.getInputStream(); BufferedInputStream bufferedInputStream = new BufferedInputStream(inputStream); ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); int bufferSize = 1024; byte[] buffer = new byte[bufferSize]; int bytesRead; while ((bytesRead = bufferedInputStream.read(buffer, 0, bufferSize)) != -1) { byteArrayOutputStream.write(buffer, 0, bytesRead); } byte[] imageData = byteArrayOutputStream.toByteArray(); ``` 接下来,我们可以使用`BitmapFactory`中的`decodeByteArray`方法将字节数据转换Bitmap对象。例如: ```java Bitmap bitmap = BitmapFactory.decodeByteArray(imageData, 0, imageData.length); ``` 最后,我们可以将这个Bitmap对象用于显示或进行其他操作。 需要注意的是,在使用网络请求时,我们应该在后台线程中进行,并确保使用完毕后关闭相关的流和连接。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我是一个对称矩阵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值