Android-如何将RGB彩色图转换为灰度图方法介绍

2016-02-19 11:31 24 1 收藏

岁数大了,QQ也不闪了,微信也不响了,电话也不来了,但是图老师依旧坚持为大家推荐最精彩的内容,下面为大家精心准备的Android-如何将RGB彩色图转换为灰度图方法介绍,希望大家看完后能赶快学习起来。

【 tulaoshi.com - 编程语言 】

实例:RGB2Grey

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

项目运行效果图:       

         src="http://img.warting.com/allimg/2015/1123/uulnhg0ipui-165.png"

源代码

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

[java] 
public class MainActivity extends Activity { 

    /* (non-Javadoc)
     * @see android.app.Activity#onCreate(android.os.Bundle)
     */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.activity_main); 
        //通过Id来获取界面中组件的引用  
        Button rgb2greyBtn  = (Button) findViewById(R.id.rgb2greybtn); 
        ImageView imageView1 = (ImageView) findViewById(R.id.imageView1); 
        final ImageView imageView2 = (ImageView) findViewById(R.id.imageView2);  
        //通过位图工厂,创建一个位图  
        final Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.ic_android); 
        imageView1.setImageBitmap(bitmap); 
        //为“转换为灰度图”按钮添加监听事件  
        rgb2greyBtn.setOnClickListener(new OnClickListener() { 

            @Override 
            public void onClick(View v) { 
                // TODO Auto-generated method stub  
                //将转换过后的灰度图显示出来  
                imageView2.setImageBitmap(convertGreyImg(bitmap)); 
            } 
        }); 

    } 

    /**
     * 将彩色图转换为灰度图
     * @param img 位图
     * @return  返回转换好的位图
     */ 
    public Bitmap convertGreyImg(Bitmap img) { 
        int width = img.getWidth();         //获取位图的宽  
        int height = img.getHeight();       //获取位图的高  

        int []pixels = new int[width * height]; //通过位图的大小创建像素点数组  

        img.getPixels(pixels, 0, width, 0, 0, width, height); 
        int alpha = 0xFF 24;  
        for(int i = 0; i height; i++)  { 
            for(int j = 0; j width; j++) { 
                int grey = pixels[width * i + j]; 

                int red = ((grey  & 0x00FF0000 ) 16); 
                int green = ((grey & 0x0000FF00) 8); 
                int blue = (grey & 0x000000FF); 

                grey = (int)((float) red * 0.3 + (float)green * 0.59 + (float)blue * 0.11); 
                grey = alpha | (grey 16) | (grey 8) | grey; 
                pixels[width * i + j] = grey; 
            } 
        } 
        Bitmap result = Bitmap.createBitmap(width, height, Config.RGB_565); 
        result.setPixels(pixels, 0, width, 0, 0, width, height); 
        return result; 
    } 

public class MainActivity extends Activity {

    /* (non-Javadoc)
     * @see android.app.Activity#onCreate(android.os.Bundle)
     */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //通过Id来获取界面中组件的引用
        Button rgb2greyBtn  = (Button) findViewById(R.id.rgb2greybtn);
        ImageView imageView1 = (ImageView) findViewById(R.id.imageView1);
        final ImageView imageView2 = (ImageView) findViewById(R.id.imageView2);
        //通过位图工厂,创建一个位图
        final Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.ic_android);
        imageView1.setImageBitmap(bitmap);
        //为“转换为灰度图”按钮添加监听事件
        rgb2greyBtn.setOnClickListener(new OnClickListener() {

   @Override
   public void onClick(View v) {
    // TODO Auto-generated method stub
    //将转换过后的灰度图显示出来
    imageView2.setImageBitmap(convertGreyImg(bitmap));
   }
  });

    }

    /**
     * 将彩色图转换为灰度图
     * @param img 位图
     * @return 返回转换好的位图
     */
    public Bitmap convertGreyImg(Bitmap img) {
     int width = img.getWidth();   //获取位图的宽
     int height = img.getHeight();  //获取位图的高

     int []pixels = new int[width * height]; //通过位图的大小创建像素点数组

     img.getPixels(pixels, 0, width, 0, 0, width, height);
     int alpha = 0xFF 24;
     for(int i = 0; i height; i++) {
      for(int j = 0; j width; j++) {
       int grey = pixels[width * i + j];

       int red = ((grey  & 0x00FF0000 ) 16);
       int green = ((grey & 0x0000FF00) 8);
       int blue = (grey & 0x000000FF);

       grey = (int)((float) red * 0.3 + (float)green * 0.59 + (float)blue * 0.11);
       grey = alpha | (grey 16) | (grey 8) | grey;
       pixels[width * i + j] = grey;
      }
     }
     Bitmap result = Bitmap.createBitmap(width, height, Config.RGB_565);
     result.setPixels(pixels, 0, width, 0, 0, width, height);
     return result;
    }
}
 

布局文件:

[html] 
LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/LinearLayout1" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical"  
    ImageView  
        android:id="@+id/imageView1" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:layout_gravity="center_horizontal" 
        / 
    Button  
        android:id="@+id/rgb2greybtn" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:text="@string/rgb2greybtn" 
        android:layout_gravity="center_horizontal"/ 
    ImageView  
        android:id="@+id/imageView2" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:layout_gravity="center_horizontal" 
        /" 
/LinearLayout 

LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/LinearLayout1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
 ImageView
     android:id="@+id/imageView1"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:layout_gravity="center_horizontal"
     /
 Button
     android:id="@+id/rgb2greybtn"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:text="@string/rgb2greybtn"
     android:layout_gravity="center_horizontal"/
 ImageView
     android:id="@+id/imageView2"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:layout_gravity="center_horizontal"
     /"
/LinearLayout

来源:http://www.tulaoshi.com/n/20160219/1597749.html

延伸阅读
如何将种子批量的转换为磁力链接 大家都知道每一个BT种子都是独一无二的,我们是不是可以将种子批量的转换为磁力链接呢?这样既方便保存,又便于下载。哈,西西今天用了一款工具就做到了哦,方法很简单的。 教程如下: 方法一、 先来分享一下网友的方法,先用bitcomet打开这个种子新建一个任务,然后右键点击这个任务选复制...
标签: 电脑入门
本文描述了如何将磁盘从FAT格式转换为NTFS格式。在确定使用何种文件系统前,您应当对它们各自的优势与局限性有所了解。 改变卷所使用的现有文件系统将是一项非常耗时的工作,因此,您应选择最适合自身长远需求的文件系统。如果决定使用一种不同的文件系统,那么,您必须首先对现有数据进行备份并使用新的文件系统重新对相应卷进行格式化。然而...
标签: 电脑入门
看到图文并茂的网页,想把它全部或部分转换为WPS或者WORD文档保存起来,最便捷的方法是什么?复制文字,下载图片,插入图片?有了WPS OFFICE,就很方便了,简单几步即可快速将网页转成wps或者word文档! 1. 保存网页 在浏览器中访问目标网页,执行菜单文件→另存为,文件类型选择网页,全部。 2、用WPS文字打开html文件 执行文件→...
标签: 摄影
人的改变是很慢的,用尽全力去靠近别人的优势只会事倍功半。上帝给每个人都留有必杀技,将目光留在他人身上太久就会发现不了自身的优点,所谓人贵有自知之明正是这个意思   任何事物都有两面,当你执着于一面时就一定在远离另一面,没有绝对意义上的对与错。当有人指出你的技术弱点时不要立时气馁,想一想这弱势是否可以转化成优势。 ...
iPhone如何将音乐转换为.m4r格式 iPhone手机使用者都知道苹果手机不支持直接把mp3格式的歌曲设置为铃声,所很多iPhone用户用的都是苹果官方原始的铃声。今天系统之家图老师小编就来教大家如何将.mp3格式铃声转换为.m4r格式的铃声: 1.iphone的铃声只能支持m4r格式,而itunes也可进行这个操作,这里主要介绍用itunes进行音乐文件的进...

经验教程

469

收藏

98
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部