• ImageView显示不出来图片


    问题??

    用ImageView控件方法:public void setImageBitmap(Bitmap bm)
    来显示生成的bimap,结果在图片显示区域显示一片空白,而且其他控件颜色没变化,造成Imageveiw显示图片不出来的假象。


    问题原因是:

    布局背景我设置为白色,而解码生成的bitmap刚好在白色背景下显示看不到一点图片痕迹,在显示图片的区域看到的只是一片空白,至于为什么bitmap在白色先显示不出来的原因暂还没想通。若你也遇到类似问题建议跟换背景试试。

    解决方法是:
    将布局文件中ImageView所在的LinearLayout或其他Layout布局的背景颜色设置为黑色,这样之前一直显示图片不出来的图片终于露出原形。


    小结:
    这个问题算是个怪胎了,用H264解码生成的Bitmap放上去显示没一点问题,而MPEG4解码出来的Bitmap放上去就是显示不出来,之前怀疑解码生成的Bitmap有问题,经过反复验证,确认解码生成的Bitmap没有问题,才猜测Imageview显示有问题,费劲脑汁的跟换Imageview显示图片的方法。转来转去,搞了半天还是木有解决问题,后堡垒灵光一线,把布局背景颜色设置为黑色,结果图片显示出来了,太诡异了。搞了半天还是碰运气解决滴。

    其实在我确认解码生成的Bitmap没问题之后,我应该想到为什么图片在默认的黑色背景下显示没一点问题,估计是被H264解码生成Bitmap显示没问题跟忽悠了,跟我定位问题时带了干扰。直接省去了那一环节。看来还是要程序化。
    当问题找不到原因时,一定要每一个环节去对比验证,即使是最不可能发生的环节,往往这就是问题原因所在。
    遇到问题,不用怕,解决它,仅此而已。

    在此小结记录下byte[] 、Bitmap与Drawbale 三者直接的转换
    1、byte[] ->Bitmap
    Bitmap Bitmap = BitmapFactory.decodeByteArray(data, offset, length);
    2、Bitmap->byte[] 这种转换我们应该将Bitmap看成是一张图片,这样我们想获取它的数据,就知道要通过流,而且是byte类型流,于是很容易记住转换方法 。
    (1)ByteArrayOutputStream out = new ByteArrayOutputStream();//获取流
    (2)bitmap.compress(CompressFormat.JPEG, 100, out);//将图片数据按照指定格式和质量压缩到某个流中,
    (3)byte[] buf = out.toByteArray();//将流转换为byte[]
    Bitmap 、Drawbale直接的转换方法特别好记,只有利用他们之间搭建着桥梁,BitmapDrawable,剩下的就是利用向上转型和向下转型的思路就可以搞定。
    3、Bitmap->Drawbale 向上转型,因为Drawbale更靠近图片文件。
    Drawable drawable = new BitmapDrawable(bitmap);
    4、Drawbale->Bitmap 向下转型
    Bitmap bitma = ((BitmapDrawable) bit).getBitmap();

    至于byte[] 与Drawbale之间的转换,那么Bitmap又相当于是桥梁。大家都懂得。

    http://blog.csdn.net/sunnyfans/article/details/7914219

  • 相关阅读:
    Kendo UI for jQuery电子表格控件可轻松实现Excel导出
    缩短
    google 插件 消息通知
    C#初学者的Hello World代码_艾孜尔江撰
    HTML简易的用户名密码登录页面_艾孜尔江撰
    一次性打开多个网页的工具脚本_艾孜尔江撰
    使用a标签无法跳转到指定网页的解决办法
    Flutter安装+Vscode+夜神模拟器+android SDK
    gitbook 说明
    两个模块之间项目依赖问题
  • 原文地址:https://www.cnblogs.com/daishuguang/p/3872060.html
Copyright © 2020-2023  润新知