android 之修改图片的某一颜色值
首先我们来创建一个叫Image的类,这个类主要用来处理与图有关的一些操作。
package org.cn.tools;
- import java.io.IOException;
- import java.io.InputStream;
- import android.content.Context;
- import android.graphics.Bitmap;
- import android.graphics.Matrix;
- import android.graphics.Bitmap.Config;
- import android.graphics.BitmapFactory;
- public class Image {
- public Bitmap bitmap; //图片资源对象
- /**
- * 通过id来获得图片
- * @param context
- * @param id
- */
- public Image(Context context,int id){
- bitmap = BitmapFactory.decodeResource(context.getResources(), id);
- }
- /**
- * 通过图片文件名来获得图片,主要用于图片在Asset目录下时
- * @param context
- * @param name 图片名
- * @param scaleW 图片宽的缩放比例
- * @param scaleH 图片高的缩放比例
- * @throws IOException
- */
- public Image(Context context,String name,float scaleW,float scaleH) throws IOException{
- InputStream is = context.getAssets().open(name);
- bitmap = BitmapFactory.decodeStream(is);
- is.close();
- bitmap = setScaleSize(bitmap, scaleW,scaleH);
- }
- public int getWidth(){
- return bitmap.getWidth();
- }
- public int getHeight(){
- return bitmap.getHeight();
- }
- /**
- * 将bitmap的像素值放入数组
- * @param array
- * @param x
- * @param y
- * @return
- */
- public int[] getPixel(int[] array,int x,int y){
- bitmap.getPixels(array, 0, getWidth(), 0, 0, getWidth(), getHeight());
- return array;
- }
- /**
- * 通过一个像素数组创建Bitmap
- * @param array
- * @param w
- * @param h
- * @return
- */
- public Bitmap CreateImage(int[] array,int w,int h){
- Bitmap image = Bitmap.createBitmap(array, w, h, Config.RGB_565);
- return image;
- }
- /**
- * 图片缩放
- * @param bitmap
- * @param arg0
- * @param arg1
- * @return
- */
- private Bitmap setScaleSize(Bitmap bitmap,float arg0,float arg1){
- Matrix matrix = new Matrix();
- matrix.postScale(arg0,arg1);
- bitmap = Bitmap.createBitmap(bitmap, 0, 0,getWidth(),getHeight(), matrix,true);
- return bitmap;
- }
- /**
- * 图片内存回收
- *
- * @param image
- * @return
- */
- public static void free(Image image) {
- try {
- if(image.bitmap != null){
- if(image.bitmap.isRecycled()==false) {//如果没有回收
- //回收图片所占的内存
- image.bitmap.recycle();
- if(image.bitmap.isRecycled()== true){
- image.bitmap = null;
- }
- }else{
- image.bitmap = null;
- }
- }else{
- image.bitmap = null;
- //return null;
- }
- } catch (Exception e) {
- e.printStackTrace();
- }
- //return image;
- }
- }</span>
创建完image处理类后我们便可以再activity里进行操作处理了,创建ImageAct.java.例子是将白色换为红色。
package org.cn;
- import java.io.IOException;
- import java.lang.Character.UnicodeBlock;
- import android.app.Activity;
- import android.graphics.Bitmap;
- import android.graphics.drawable.BitmapDrawable;
- import android.os.Bundle;
- import android.view.View;
- import android.view.View.OnClickListener;
- import android.view.Window;
- import android.view.WindowManager;
- import android.view.WindowManager.LayoutParams;
- import android.widget.ImageView;
- public class ImageAct extends Activity {
- Image image;
- int len;
- int red;
- int greed;
- int blue;
- int apla;
- int pix;
- /** Called when the activity is first created. */
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- try {
- image = new Image(this, "Alfa_Romeo_8C_Competizione_Detail.png",1,1);
- len = image.getWidth() * image.getHeight();
- int[] imageARGB = new int[len];
- int[] newimage = new int[len];
- image.getPixel(imageARGB, 0, 0);
- for (int i = 0; i < image.getHeight(); i++)
- for (int j = 0; j < image.getWidth(); j++) {
- if (imageARGB[i * image.getWidth() + j] != 0) {
- //apla = ((imageARGB[i * image.getWidth() + j]&0xaa000000)>>24);
- red = ((imageARGB[i * image.getWidth() + j] & 0x00ff0000) >> 16);
- greed = ((imageARGB[i * image.getWidth() + j] & 0x0000ff00) >> 8);
- blue = ((imageARGB[i * image.getWidth() + j] & 0x000000ff));
- // int apla = ((5 * 255 / 10) << 24) | 0x00ffffff;
- if (red == 255 && greed == 255 & blue == 255) {
- red = 255;
- greed = 0;
- blue = 0;
- // pix =((red<<16)|(greed<<8)|blue)&apla;
- }
- pix = (red << 16) | (greed << 8) | blue;
- newimage[i * image.getWidth() + j] = pix;
- } else
- newimage[i * image.getWidth() + j] = imageARGB[i
- * image.getWidth() + j];
- }
- Bitmap bitmap = image.CreateImage(newimage, image.getWidth(),
- image.getHeight());
- ((ImageView) findViewById(R.id.imageView1)).setImageBitmap(bitmap);
- } catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- }
ok通过上面的两个类就可以将图片里的白色转换为红色了。
android 之修改图片的某一颜色值的更多相关文章
- android 通过修改图片像素实现CircleImageView
CircleImageView实现方法有很多种,各有优缺点,因此需要按照不同的场景使用.我们今天使用修改图片像素的方法实现CircleImageView,主要知识点无非是勾股定理和点到圆形的距离. 素 ...
- Android动态修改图片颜色的实现方式分析
版权声明:本文为博主原创文章,未经博主允许不得转载. 1.修改色相.饱和度.亮度 参看:http://blog.csdn.NET/sjf0115/article/details/7267063 2.使 ...
- Android 实现对图片 Exif 的修改(Android 自带的方法)
很多时候我们都要对我们的图片信息进行一些处理,比如向图片中写入经纬度,拍摄时间,设备信息,作者等等. 这个时候我们就要对我们的图片Exif进行写入信息的操作,当然,我们想知道图片的Exif信息,也可以 ...
- [转]【Android】9-patch图片以及例子说明
1.何为9-patch? NinePatch图片以*.9.png结尾,和普通图片(png图片)的区别是四周多了一个边框(如下图所示): 采用NinePatch图片做背景,可使背景随着内容的拉伸(缩小) ...
- Android公共库——图片缓存 网络缓存 下拉及底部更多ListView 公共类
Android公共库——图片缓存 网络缓存 下拉及底部更多ListView 公共类 转载自http://www.trinea.cn/android/android-common-lib/ 介绍总结的一 ...
- Picasso – Android系统的图片下载和缓存类库
Picasso – Android系统的图片下载和缓存类库 Picasso 是Square开源的一个用于Android系统下载和缓存图片的项目.该项目和其他一些下载图片项目的主要区别之一是:使用4.0 ...
- android 加载图片框架--Glide使用详解
一.简介 Glide,一个被google所推荐的图片加载库,作者是bumptech.这个库被广泛运用在google的开源项目中,包括2014年的google I/O大会上发布的官方app.(PS:众所 ...
- Android开发笔记——图片缓存、手势及OOM分析
把图片缓存.手势及OOM三个主题放在一起,是因为在Android应用开发过程中,这三个问题经常是联系在一起的.首先,预览大图需要支持手势缩放,旋转,平移等操作:其次,图片在本地需要进行缓存,避免频繁访 ...
- Android微信九宫格图片展示控件
版权声明:本文为xing_star原创文章,转载请注明出处! 本文同步自http://javaexception.com/archives/214 Android微信九宫格图片展示控件 半年前,公司产 ...
随机推荐
- Android 多线程下载,断点续传,线程池
你可以在这里看到这个demo的源码: https://github.com/onlynight/MultiThreadDownloader 效果图 这张效果图是同时开启三个下载任务,限制下载线程数量的 ...
- Unity5中的粒子缩放(附测试源码)
本文章由cartzhang编写,转载请注明出处. 所有权利保留. 文章链接:http://blog.csdn.net/cartzhang/article/details/49363241 作者:car ...
- STL中erase()的陷阱
最近在刷stl源码剖析这本书时,对于vector的erase()函数引起了我的注意 在删除单个元素时是这样定义的: iterator erase(iterator position){ !=end() ...
- 洛谷 P1130 红牌
P1130 红牌 题目描述 某地临时居民想获得长期居住权就必须申请拿到红牌.获得红牌的过程是相当复杂 ,一共包括N个步骤.每一步骤都由政府的某个工作人员负责检查你所提交的材料是否符合条件.为了加快进程 ...
- 洛谷 P2694 接金币
P2694 接金币 题目描述 在二维坐标系里,有N个金币,编号0至N-1.初始时,第i个金币的坐标是(Xi,Yi).所有的金币每秒向下垂直下降一个单位高度,例如有个金币当前坐标是(xf, yf),那么 ...
- Android提示版本号更新操作流程
Android提示版本号更新操作流程 2014年5月8日: andorid的app应用中都会有版本号更新的操作,今天空暇的时候就花了点心思弄了一下.主要技术方面用到了AsyncTask异步载入.htt ...
- 10. ZooKeeper之搭建伪集群模式。
转自:https://blog.csdn.net/en_joker/article/details/78673456 在集群和单机两种模式下,我们基本完成了分别针对生产环境和开发环境ZooKeeper ...
- Vijos 1164 曹冲养猪(中国剩余定理)
P1164曹冲养猪 Accepted 标签:三国争霸[显示标签] 描写叙述 自从曹冲搞定了大象以后,曹操就開始捉摸让儿子干些事业,于是派他到中原养猪场养猪,但是曹冲满不高兴.于是在工作中马马虎虎,有一 ...
- Codeforces Beta Round #17 D. Notepad (数论 + 广义欧拉定理降幂)
Codeforces Beta Round #17 题目链接:点击我打开题目链接 大概题意: 给你 \(b\),\(n\),\(c\). 让你求:\((b)^{n-1}*(b-1)\%c\). \(2 ...
- 使用VHD,让Win XP和 Win2003 运行在内存中
通过一定的手段可以让XP和2003甚至Win7运行在内存中.我很感兴趣,于是按照网上的资料在VBox虚拟机中测试了一次,运行成功.这几天将其折腾到实体机上. 声明:我的做法和网上的做法有些不一样,我的 ...