Android InputStream转Bitmap

本文介绍了一种通过Android Socket服务端接收Delphi Socket客户端发送的图片,并将其转换为Bitmap的方法。该方法首先从输入流中读取图片数据,然后利用文件大小作为接收长度的判断条件,确保图片完整接收后,使用BitmapFactory将字节数组转换为Bitmap。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

android socket服务端 接收Delphi socket客户端发来的图片,保存到bitmap中,代码如下:

 

	public static Bitmap readInputStreamToBitmap(InputStream ins, int fileSize) {  
	    if (ins == null) {  
	        return null;  
	    } 
	    byte[] b;
	    ByteArrayOutputStream bos = new ByteArrayOutputStream();  
	    try {  
	        byte[] buffer = new byte[1024];  
	        int size = -1;  
	        int len = 0;// 已经接收长度
	        size = ins.read(buffer);
	        while (size != -1) { 
	        	len = len + size;//
	            bos.write(buffer, 0, size);  
	            if (fileSize == len) {// 接收完毕					
			break;
		    }
		   size = ins.read(buffer);
	        }  
	        b = bos.toByteArray();
	        bos.close();
	    } catch (IOException e) {  
	        e.printStackTrace();  
	        return null;  
	    }  
	    if (b.length != 0) {  
            return BitmapFactory.decodeByteArray(b, 0, b.length);  
        }  
        return null;	     
	}

  

### 回答1: 在 Android 中,可以使用 `BitmapFactory` 类中的 `decodeStream()` 方法来将 raw 资源文件换为 `Bitmap` 对象。 例如,如果你要将名为 `my_image` 的 raw 资源文件换为 `Bitmap` 对象,可以使用以下代码: ``` InputStream inputStream = getResources().openRawResource(R.raw.my_image); Bitmap bitmap = BitmapFactory.decodeStream(inputStream); ``` 注意:在上述代码中,`getResources()` 方法返回当前上下文中的 `Resources` 对象,`openRawResource()` 方法用于打开 raw 资源文件并返回一个 `InputStream` 对象,然后将这个 `InputStream` 对象传递给 `decodeStream()` 方法,它将返回一个 `Bitmap` 对象。 需要注意的是,使用 `decodeStream()` 方法换 raw 资源文件时,你可能需要手动关闭 `InputStream` 对象,以释放系统资源。 ``` try { InputStream inputStream = getResources().openRawResource(R.raw.my_image); Bitmap bitmap = BitmapFactory.decodeStream(inputStream); } finally { inputStream.close(); } ``` ### 回答2: Android中的raw文件夹是用于存放各种资源文件的文件夹之一。而将raw文件换为bitmap需要经过以下几个步骤: 首先,我们需要获取raw文件的路径。可以使用`Context`的`getResources()`方法,再调用`openRawResource()`方法,将对应的资源ID作为参数传入,此时会返回一个`InputStream`对象。 接下来,我们可以使用`BitmapFactory`的`decodeStream()`方法,将刚才获取到的`InputStream`对象换为`Bitmap`对象。此时需要传入一个`InputStream`参数,这里即为刚才获取到的`InputStream`对象。 最后,我们可以将得到的`Bitmap`对象用于需求中的任何操作,例如显示在`ImageView`中。 下面是代码示例: ```java // 获取raw文件的路径 InputStream inputStream = getResources().openRawResource(R.raw.my_raw_file); // 将InputStream换为Bitmap Bitmap bitmap = BitmapFactory.decodeStream(inputStream); // 将Bitmap对象显示在ImageView中 ImageView imageView = findViewById(R.id.my_image_view); imageView.setImageBitmap(bitmap); ``` 以上就是将Android的raw文件换为bitmap的简单步骤。 ### 回答3: 在Android中,将raw资源文件换为Bitmap的过程相对简单。首先,我们需要获取raw资源的文件描述符,然后利用BitmapFactory类的decodeStream方法将文件描述符换为Bitmap对象。 以下是具体的代码示例: ``` InputStream inputStream = getResources().openRawResource(R.raw.image); // 获取raw资源的输入流 Bitmap bitmap = BitmapFactory.decodeStream(inputStream); // 将输入流换为Bitmap对象 ``` 在上述代码中,我们首先使用getResources().openRawResource(R.raw.image)方法获取raw资源的输入流。假设我们的资源文件名为image,所以将R.raw.image作为参数传入该方法中。 接着,我们使用BitmapFactory.decodeStream(inputStream)方法将输入流换为Bitmap对象。最终,我们就得到了从raw资源中获取到的Bitmap对象。 需要注意的是,这段代码需要在Android的UI线程中执行,以避免阻塞UI界面。 另外,如果你想确定Bitmap对象宽高的话,可以使用BitmapFactory.Options结构和inJustDecodeBounds属性来进行二次采样处理。具体做法是首先使用inJustDecodeBounds属性为true来解码一次,获取到Bitmap的宽高信息,然后根据需要的宽高再次使用inJustDecodeBounds属性为false来解码正常的Bitmap。这样可以有效减少内存的使用。 希望以上回答对你有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值