android开发 替换bitmap中的颜色值

/**
     * 将bitmap中的某种颜色值替换成新的颜色
     * @param bitmap
     * @param oldColor
     * @param newColor
     * @return
     */
    public static Bitmap replaceBitmapColor(Bitmap oldBitmap,int oldColor,int newColor)
    {
        //相关说明可参考 http://xys289187120.blog.51cto.com/3361352/657590/
        Bitmap mBitmap = oldBitmap.copy(Config.ARGB_8888, true);
        //循环获得bitmap所有像素点
        int mBitmapWidth = mBitmap.getWidth();
        int mBitmapHeight = mBitmap.getHeight();
        int mArrayColorLengh = mBitmapWidth * mBitmapHeight;
        int[] mArrayColor = new int[mArrayColorLengh];
        int count = 0;
        for (int i = 0; i < mBitmapHeight; i++) {
            for (int j = 0; j < mBitmapWidth; j++) {
                //获得Bitmap 图片中每一个点的color颜色值
                //将需要填充的颜色值如果不是
                //在这说明一下 如果color 是全透明 或者全黑 返回值为 0
                //getPixel()不带透明通道 getPixel32()才带透明部分 所以全透明是0x00000000
                //而不透明黑色是0xFF000000 如果不计算透明部分就都是0了
                int color = mBitmap.getPixel(j, i);
                //将颜色值存在一个数组中 方便后面修改
                if (color == oldColor) {
                    mBitmap.setPixel(j, i, newColor);  //将白色替换成透明色
                    }                      

            }
        }
        return mBitmap;
    }

使用方法:

iv_image.setImageBitmap(BitmapUtil.replaceBitmapColor(gifDecoder.getFrame(i), Color.WHITE, Color.TRANSPARENT));

时间: 2024-08-05 07:07:09

android开发 替换bitmap中的颜色值的相关文章

Android开发——VirtualBox环境中的虚拟机使用

题目想了半天,还是那么纠结,解释下吧.最近开始接触Android开发,开发环境的部署就不说了,各种费劲凿墙.好不容易搞定了,调试又来了问题.Android设备老旧,效率低下:AVD就是更不用说了,一张张图片看过去.好在有神器,Genymotion! 在此强力推荐~!性能甩各种android设备好几条街. 可是问题来了,本人有个癖好,喜欢将各种开发环境分别放到不同的虚拟机里,这样互相不会干扰,而且可以带来带去.但是Genymotion在虚拟机里用不了~,提示需要OpenGL2.0版本以上的支持.可

Android 开发替换Launcher

做android产品的时候,根据需求会制定各种各样的Launcher,因此,在此记录替换系统Launcher的流程. 1.修改frameworks/base/core/java/android/content/Intent.java中 //public static finalString CATEGORY_HOME = "android.intent.category.HOME";改为        public static final String CATEGORY_RB_HOM

Android开发:Eclipse中SqliteManager插件使用

通常开发Android的时候要使用到数据库操作,会遇到下面小问题: 数据库文件在哪?怎样訪问或操作? 能够通过:打开DDMS->File Explorer看到的sqlite数据库在eclipse,然后在文件夹/data/data/package_name/databases下找到. 可是我们仅仅能看到.db文件,根本看不到里面的表格数据,更别说操作数据啦. 当然,我们能够把.db文件导出来,用数据库操作工具(如SQLite Expert)来操作数据,这是不是非常麻烦呀,今天我们就能够用一个简单的

android开发(41) Fragment中使用POP_BACK_STACK_INCLUSIVE达到一次跳转到栈底。类似Activity的 采用FLAG_ACTIVITY_CLEAR_TOP

需求场景: 在开发中遇到下面这样场景: 1.创建 Fragment A 显示.  这时栈的结构是: 1.Fragment A 2.创建 Fragment B 并 显示.  从下到上看,这时栈的结构是: 2.Fragment B 1.Fragment A 3.创建 Fragment C 并 显示.  从下到上看,这时栈的结构是: 3.Fragment C 2.Fragment B 1.Fragment A 那么,如何从 Fragment C 一次性跳到 Fragment A 呢? 实现: 入栈时,

如何在android开发使用ACTION_SEND中共享图片和文本

我想使用 ACTION_SEND 共享图片+文字,我运行了下面的代码,暂时只能共享图片,无法共享文字,我如何才能共享? private Uri imageUri; private Intent intent; imageUri = Uri.parse("android.resource://" + getPackageName() + "/drawable/" + "ic_launcher"); intent = new Intent(); in

android开发在eclipse中给apk签名并发布

有时候直接安装bin文件夹下的apk文件会报错[已安装了存在签名冲突的同名数据包] 的错误, 原因是这个apk 默认是debug用户签名过的.我们只要设置自己的签名就ok了, 具体方法如下. 1. 签名用的工具. keytool.exe  在jdk安装路径下 这是我的D:\java\jdk1.7.0_09\binkeytool.exe 直接拖到控制台(不需要设置环境变量了) , 空格  然后再后面加一些参数 -genkey -alias demo.keystore -keyalg RSA -va

Android开发 解决AlertDialog中的EditText无法调出输入法的问题

在AlertDialog中使用自定义的View,如果View中有EditText,在上面点击,默认是跳不出软键盘的,不是焦点的问题.解决方法,有两种,一是把AlertDialog换成Dialog,但这么一来,对话框的最外层会多出一个框,顶部还会空几十个DP,当然可以用setBackgroundDrawable(new ColorDrawable(0))把背景设为透明,隐藏掉边框,但是上面空着的几十个DP还在,对话框就不是在屏幕居中了.代码: Dialog ad = new Dialog(cont

android开发环境搭建中容易遇到的问题和疑惑

1.JDK是向下兼容的,JDK安装高版本,eclipse.ADT.SDK安装低本版本是可以的. 2.eclipse的版本与ADT.SDK的版本必须是匹配的.无论是低版本的eclipse安装高版本的ADT还是,高版本的eclipse安装低版本的ADT,在安装过程中都会出现conflict而导致不能安装,即使安装过程能够顺利通过,也属于安装不成功,因为在打开eclipse后,eclipse界面当中没有AVD安装成功后应出现的一组功能按钮,如图: 这几个按钮时AVD安装成功的标志. 3.如果eclip

Android开发:在EditText中关闭软键盘 转来的

1.EditText有焦点(focusable为true)阻止输入法弹出 Java代码   editText=(EditText)findViewById(R.id.txtBody); editText.setOnTouchListener(new OnTouchListener() { public boolean onTouch(View v, MotionEvent event) { editText.setInputType(InputType.TYPE_NULL); // 关闭软键盘