2019独角兽企业重金招聘Python工程师标准>>>
我这个实例是将一个位图用几秒钟扫描,然后得到它的反色图。做这个实例主要是想研究下Bitmap类和Color类,重点是getPixe和setPix的这两个方法的用法。
Java代码
1 publicclassSkanBitmapextendsActivity{
2 /**Calledwhentheactivityisfirstcreated.*/
3 privateBitmapbm;//要扫描的图片
4 privateBitmappm;//扫描后得到的图片
5 privateintwidth,height;//图片的宽和高
6 privateButtonbutton;
7 privateImageViewimageview;
8 @Override
9 publicvoidonCreate(BundlesavedInstanceState){
10 super.onCreate(savedInstanceState);
11 setContentView(R.layout.main);
12 button=(Button)findViewById(R.id.button);
13 imageview=(ImageView)findViewById(R.id.imageView);
14 bm=BitmapFactory.decodeResource(getResources(),R.drawable.sssd);//从资源文件中得到一个位图
15 width=bm.getWidth();//获取位图的宽
16 height=bm.getHeight();//获取位图的高
17 button.setOnClickListener(newOnClickListener(){
18 @Override
19 publicvoidonClick(Viewarg0){
20 //TODOAuto-generatedmethodstub
21 //新建一个宽是width,高是height,图片格式是RGB_565的空位图。
22 pm=Bitmap.createBitmap(width,height,Bitmap.Config.RGB_565);
23 imageview.setImageBitmap(pm);
24 newthread().start();//开始扫描图片的线程
25 }
26 });
27 }
28
29 //扫描图片的线程
30 classthreadextendsThread{
31 publicvoidrun(){
32 button.setClickable(false);//暂时将按钮的点击事件屏蔽掉,保证一次只开启一个线程
33 int[]colors=newint[width];//取一行图片的像素点
34 for(inti=0;i 35 //将位图bm的第i行的像素放入到数组colors中去 36 bm.getPixels(colors,0,width,0,i,width,1); 37 for(intj=0;j 38 //将颜色数组中的RGB值取反,255减去当前颜色值就获得当前颜色的反色 39 colors[j]=Color.rgb(255-Color.red(colors[j]), 40 255-Color.green(colors[j]),255-Color.blue(colors[j])); 41 } 42 pm.setPixels(colors,0,width,0,i,width,1);//颜色取反后,将像素加入到pm的第i行中去 43 imageview.postInvalidate();//刷新图片 44 } 45 button.setClickable(true);//重新监听按钮的点击事件 46 47 48 } 49 } 50 51 }