BitMap、Drawable、inputStream及byte[] 互转

Bitmap,byte[],Drawable相互转化 1、Drawable就是一个可画的对象,其可能是一张位图(BitmapDrawable),也可能是一个图形(ShapeDrawable),还有可能是一个图层(LayerDrawable),我们根据画图的需求,创建相应的可画对象2、Canvas画布,绘图的目的区域,用于绘图3、Bitmap位图,用于图的处理4、Matrix矩阵 立即下载
  1. 1、Drawable → Bitmap  
  2.   
  3. public static Bitmap drawableToBitmap(Drawable drawable) {  
  4.           
  5.         Bitmap bitmap = Bitmap  
  6.                         .createBitmap(  
  7.                                         drawable.getIntrinsicWidth(),  
  8.                                         drawable.getIntrinsicHeight(),  
  9.                                         drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888  
  10.                                                         : Bitmap.Config.RGB_565);  
  11.         Canvas canvas = new Canvas(bitmap);  
  12.         //canvas.setBitmap(bitmap);  
  13.         drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());  
  14.         drawable.draw(canvas);  
  15.         return bitmap;  
  16. }  
  17.   
  18.    
  19.   
  20. 2、从资源中获取Bitmap  
  21.   
  22.    
  23.   
  24. Resources res=getResources();  
  25.   
  26. Bitmap bmp=BitmapFactory.decodeResource(res, R.drawable.pic);  
  27.   
  28.    
  29.   
  30. 3、Bitmap → byte[]  
  31.   
  32.    
  33.   
  34. private byte[] Bitmap2Bytes(Bitmap bm){  
  35.     ByteArrayOutputStream baos = new ByteArrayOutputStream();    
  36.     bm.compress(Bitmap.CompressFormat.PNG, 100, baos);    
  37.     return baos.toByteArray();  
  38.    }  
  39.   
  40.    
  41. 4、 byte[] → Bitmap  
  42.   
  43. private Bitmap Bytes2Bimap(byte[] b){  
  44.             if(b.length!=0){  
  45.                 return BitmapFactory.decodeByteArray(b, 0, b.length);  
  46.             }  
  47.             else {  
  48.                 return null;  
  49.             }  
  50.       }  
  51.   
  52.    
  53.   
  54.    
  55.   
  56.    
  57.   //将assets文件中资源取出,并将图片从bitmap转换成drawable格式  
  58.     public static Drawable getDrawableFromAssetFile(Context context,String fileName){     
  59.         Bitmap image = null;     
  60.         BitmapDrawable drawable=null;  
  61.         try{     
  62.             AssetManager am = context.getAssets();     
  63.             InputStream is = am.open(fileName);    
  64.             image = BitmapFactory.decodeStream(is);    
  65.             drawable= new BitmapDrawable(context.getResources(), image);  
  66.             is.close();     
  67.         }catch(Exception e){                 
  68.         }     
  69.         return drawable;     
  70.     }  
  71. 以上是我在实践中遇到的一些转换,以后遇到类似的就不用到处找了,希望对大家也有一点用处!  
                       inputStream is=xxxx;
                  BitmapDrawable bmpDraw=new BitmapDrawable(is);
                     Bitmap bmp=bmpDraw.getBitmap();

android 中怎样将 R.drawable里面的图片资源转成换Bitmap型

Bitmap bmp=BitmapFactory.decodeResource(r, R.drawable.icon);
Bitmap newb = Bitmap.createBitmap( 300, 300, Config.ARGB_8888 ); 
Canvas canvasTemp = new Canvas( newb );  
 canvasTemp.drawBitmap(bmp, 50, 50, p);




android在处理一写图片资源的时候,会进行一些类型的转换,现在有空整理一下:

 

1、Drawable → Bitmap

public static Bitmap drawableToBitmap(Drawable drawable) {
        
        Bitmap bitmap = Bitmap
                        .createBitmap(
                                        drawable.getIntrinsicWidth(),
                                        drawable.getIntrinsicHeight(),
                                        drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888
                                                        : Bitmap.Config.RGB_565);
        Canvas canvas = new Canvas(bitmap);
        //canvas.setBitmap(bitmap);
        drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());
        drawable.draw(canvas);
        return bitmap;
}

 

2、从资源中获取Bitmap

 

Resources res=getResources();

Bitmap bmp=BitmapFactory.decodeResource(res, R.drawable.pic);

 

3、Bitmap → byte[]

 

private byte[] Bitmap2Bytes(Bitmap bm){
    ByteArrayOutputStream baos = new ByteArrayOutputStream();  
    bm.compress(Bitmap.CompressFormat.PNG, 100, baos);  
    return baos.toByteArray();
   }

 
4、 byte[] → Bitmap

private Bitmap Bytes2Bimap(byte[] b){
		    if(b.length!=0){
		    	return BitmapFactory.decodeByteArray(b, 0, b.length);
		    }
		    else {
		    	return null;
		    }
	  }

 

 

 
  //将assets文件中资源取出,并将图片从bitmap转换成drawable格式
    public static Drawable getDrawableFromAssetFile(Context context,String fileName){   
        Bitmap image = null;   
        BitmapDrawable drawable=null;
        try{   
            AssetManager am = context.getAssets();   
            InputStream is = am.open(fileName);  
            image = BitmapFactory.decodeStream(is);  
            drawable= new BitmapDrawable(context.getResources(), image);
            is.close();   
        }catch(Exception e){               
        }   
        return drawable;   
    }
以上是我在实践中遇到的一些转换,以后遇到类似的就不用到处找了,希望对大家也有一点用处!



http://www.iteye.com/topic/642128
http://blog.youkuaiyun.com/scut1135/article/details/7063471android在处理一写图片资源的时候,会进行一些类型的转换,现在有空整理一下: 1、Drawable → Bitmap
Java代码  
public static Bitmap drawableToBitmap(Drawable drawable) {  

          

        Bitmap bitmap = Bitmap  

                        .createBitmap(  

                                        drawable.getIntrinsicWidth(),  

                                        drawable.getIntrinsicHeight(),  

                                        drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888  

                                                        : Bitmap.Config.RGB_565);  

        Canvas canvas = new Canvas(bitmap);  

        //canvas.setBitmap(bitmap);  

        drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());  

        drawable.draw(canvas);  

        return bitmap;  

}  
2、从资源中获取Bitmap 
Java代码  
Resources res=getResources();  

  

Bitmap bmp=BitmapFactory.decodeResource(res, R.drawable.pic);  
3、Bitmap → byte[] 
Java代码  
private byte[] Bitmap2Bytes(Bitmap bm){  

    ByteArrayOutputStream baos = new ByteArrayOutputStream();   

     // compress 是用于压缩图片的api接口,可以将图片压缩成jpg,png等格式。

     // 第一个参数是压缩成图片的格式

     // 第二个参数是压缩图片的质量,对于png格式,此参数可以忽略

     // 第三个参数是图片压缩成的输出流

    bm.compress(Bitmap.CompressFormat.PNG, 100, baos);    

    return baos.toByteArray();  

   }  
4、 byte[] → Bitmap
Java代码  
private Bitmap Bytes2Bimap(byte[] b){  

            if(b.length!=0){  

                return BitmapFactory.decodeByteArray(b, 0, b.length);  

            }  

            else {  

                return null;  

            }  

      }  c
以上是我在实践中遇到的一些转换,以后遇到类似的就不用到处找了,希望对大家也有一点用处!
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++android中使用BitmapFactory的decodeStream()方法解码图片失败问题
 从网络获取图片,数据为InputStream流对象,然后调用BitmapFactory的decodeStream()方法解码获取图片。代码如下: 
[java] view plaincopy

private Bitmap getUrlBitmap(String url)  

{  

Bitmap bm;  

try{  

URL imageUrl=new URL(url);  

HttpURLConnection conn=(HttpURLConnection)imageUrl.openConnection();  

conn.connect();  

InputStream is=conn.getInputStream();  

//byte[] bt=getBytes(is); //注释部分换用另外一种方式解码  

//bm=BitmapFactory.decodeByteArray(bt,0,bt.length);  

bm=BitmapFactory.decodeStream(is); //如果采用这种解码方式在低版本的API上会出现解码问题  

is.close();  

conn.disconnect();  

return bm;  

}  

catch(MalformedURLException e)  

{  

e.printStackTrace();  

}  

catch (IOException e)  

{  

e.printStackTrace();  

}  

return null;  

  

}  
结果在运行时编译器提示:          DEBUG/skia(xxx):--- decoder->decode returnedfalse 已经确定从网络获取的数据流没有出现问题,而是在图片解码时出现错误。上网查找了不少资料,也没有得出确切的原因,不过有几条意见值得关注。一种说法是在android 较低版本的api中会有不少内部的错误,我的代码运行时选择2.1API Level 7和2.2API Level 8都会出现这个问题,而选择2.3 API Level 9后能够正常解码图片。我的另外一种做法是换用别的解码方式对图片解码,见代码中被注释的那俩行,使用decodeByteArray()方法在低版本的API上也能够正常解码,解决了这个问题。其中getBytes(InputStream is)是将InputStream对象转换为Byte[]的方法,具体代码如下:
[java] view plaincopy

private byte[] getBytes(InputStream is) throws IOException {  

  

ByteArrayOutputStream baos = new ByteArrayOutputStream();  

byte[] b = new byte[1024];  

int len = 0;  

  

while ((len = is.read(b, 0, 1024)) != -1)  

{  

baos.write(b, 0, len);  

baos.flush();  

}  

byte[] bytes = baos.toByteArray();  

return bytes;  

}  


将Bitmap转换为Byte[] 一个在VC中将Bitmap转换为Byte[]的小例子。 立即下载

相关推荐

Frida三层次钩子快速逆向VMP+OLLVM加固APK

VMP(虚拟机保护)和OLLVM(控制流平坦化)是Android应用常见的双重混淆技术,其核心原理是将Java逻辑虚拟化、Native代码控制流打散,从而阻断传统静态分析与简单Hook。但任何混淆都必须在CPU上执行,因此必然暴露JNI注册行为、ABI参数传递规律及系统调用痕迹。基于此,Frida可通过跨层联动——从JNI_OnLoad捕获Native库加载、在VMP解释器入口截获字节码上下文、于关键系统调用(如read/gettimeofday)反向追踪数据流——构建可观测、可复现的动态分析链。该方法无需

weixin_30888413的博客 1002

C# Bimap转bytes解决方法

C#中,Bitmap数据转换成bytes[]的方法如下:                 var bitmap = new Bitmap(“D:\\default.jpg”);                                                           //初始化bitmap                 MemoryStream imgStream

likingsn的技术专栏 1666

Unity IAP插件实战:从零搭建Google Play内购系统

本文详细介绍了如何使用Unity IAP插件从零搭建Google Play内购系统,涵盖环境准备、双端配置、核心API实现及常见问题排查。通过实战代码示例,帮助开发者快速掌握跨平台内购功能开发,提升手游商业化效率。

weixin_28692867的博客 431

Android Bitmap

package com.testbitmapscale; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.util.Iterator; i

laoye_laoye的专栏 659

天线学习笔记——串馈网络设计

工程中通常更倾向于使用50Ω、70.7Ω、100Ω的固定阻抗的带宽,实际中可以分别使用固定阻抗的带宽和计算得到的带宽进行仿真,观察二者的性能,取性能更优者即可。本系列是一个记录天线设计的笔记,分享出来也希望能够帮助到大家,后续本系列文章还会不定期更新,如有需要可关注,任何问题均可在评论区或私信提出,看到必回。如果对大家有帮助可进行打赏哦~

Ethan的博客 7881

1.2 重叠因子:双重指数移动平均(Double Exponential Moving Average, DEMA)概念与Python实战

双重指数移动平均(Double Exponential Moving Average, DEMA)是一种改进的移动平均线指标,由Patrick Mulloy在1994年开发。相比传统的指数移动平均线(EMA),DEMA通过减少滞后性来提供更快的市场反应。它通过两次计算EMA并进行特殊组合来实现这一目标,可以在保持平滑性的同时减少滞后。

Kewin的博客 2170

bitmap 与 InputStream、filePath 、resId 、ByteArray、URL互转

转bitmap //BitmapFactory.Options : 可配置比例压缩 public class BitmapFactory { //ByteArray -> Bitmap public static Bitmap decodeByteArray(byte[] data, int offset, int length, ...

火星男孩的分享空间 473

DisplayPort 1.4扰码原理与16位并行LFSR实现

DisplayPort物理层信号完整性依赖于数据扰码技术,其本质是通过线性反馈移位寄存器(LFSR)对传输数据进行伪随机化处理,以改善频谱分布、抑制低频能量堆积、提升时钟恢复能力并降低EMI辐射。该技术广泛应用于高速串行接口如DP、PCIe和USB,核心在于确定性伪随机序列生成与收发端同步。DisplayPort 1.4强制要求符合ANSI X3.230标准的16级LFSR,并在8b/10b编码后执行扰码;而传统串行实现难以满足21.6Gbps速率下的时序约束,必须采用并行展开结构——将16拍移位压缩为单周

weixin_29192211的博客 313

android BitMap、Drawable、inputStream及byte[] 互转

1. Bitmap转换为inputStream ByteArrayOutputStream baos = new ByteArrayOutputStream(); bm.compress(Bitmap.CompressFormat.PNG, 100, baos); InputStream isBm = new ByteArrayInputStream(baos .toByteArray()); 2. BitMap转换为byte[] Bitmap bitmap = Bitma

圆静居士的专栏 720

逻辑回归:利用Python实现二分类算法

通过使用Python编写的代码,我们可以训练逻辑回归模型并进行预测。接下来,我们将实现逻辑回归算法的训练函数。训练函数将接受训练数据集X和对应的标签y,以及学习率alpha和迭代次数num_iterations。训练完成后,我们可以使用训练得到的参数theta来进行预测。在这个例子中,我们有一个包含4个样本的训练数据集X,每个样本有两个特征。在这个例子中,如果预测概率大于等于0.5,则预测为类别1,否则预测为类别0。现在,我们可以使用训练函数来训练模型。根据给定的样本x_new,预测函数将返回相应的类别。

XlltEditor的博客 326

SAP-RPT-1 深度解读:面向企业表格数据的 rapid one

摘要: SAP在TechEd 2025大会上推出面向企业结构化数据的SAP-RPT-1(Relational Pretrained Transformer),旨在通过in-context learning直接预测表格数据中的缺失值,无需传统机器学习流程。与LLM不同,RPT专为业务表格设计,支持实时预测(如交货延迟、回款风险等)。提供Small(高吞吐)、Large(高精度)和开源版本,用户可通过无代码Playground(上传CSV并用[PREDICT]标记目标列)或Python API快速验证。典型场景

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 238

Drawable /Bitmap、String/InputStream、Bitmap/byte[]互转

Drawable互转Bitmap Drawable转Bitmap 1234 Resources res = getResources();Drawable drawable = res.getDrawable(R.drawable.myimage);BitmapDrawable bd = (BitmapDrawable) d;Bitmap bm = bd.getB

Fan 376

YOLOv11 改进入门篇 | 轻量级涨点技巧:GhostConv 替代普通卷积的实战指南

摘要: 本文介绍如何通过GhostConv改进YOLOv11,实现轻量化涨点。YOLOv11深度增加导致参数量、延迟和内存占用上升,GhostConv通过“本征特征+线性变换”策略,在精度几乎无损的情况下降低30%-50%计算量。文章详细解析GhostConv原理,对比普通卷积的参数量和FLOPs优势,并提供完整的代码级改造流程,包括模块实现、注册及网络配置。实验表明,该方法有效提升边缘端推理效率,适用于移动端等资源受限场景。

shrgegrb的博客 1657
上一篇: Android中长度单位详解
下一篇: Android状态栏(一):StatusBar的浮动显示与隐藏
codingbuddy
博客等级 码龄14年 4粉丝 8原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值