1.环境搭建

操作系统是Mac OS,一年多以前写Android的时候用的还是Eclipse,操作系统是Windows,记得环境很难搭建,总是会有错误,所以面试的时候要求完成这个Demo还是有一点点虚。不过用Baidu和Google查了怎么搭建环境之后,发现有了官方的IDE:Android Studio,我还是很开心的,决定不用eclipse搭环境了,改用Android Studio,因为这样只要安装一个软件就可以了。搭建过程参考:http://www.tuicool.com/articles/FNRfyiF

需要注意的是,安装Android Studio时会自动下载Android SDK,如果没有会出现下载失败的情况(免费可使用Lantern,安卓,mac及win都可以)。

Android Studio下载官方网站:http://developer.android.com/sdk/index.html


2.调用相机

由于很久没写Android,还是花了点时间写这一部分。

在网上找的代码,都会先判断SD卡是否存在,是否可以利用ExternalStorage。一直在纠结这个问题,因为手机没有SD卡,但其实也可以的。

调用相机部分代码很简单:

button.setOnClickListener(new OnClickListener() {            @Override            public void onClick(View v) {                Intent camera = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);    //open the camera                startActivityForResult(camera, CAMERA);            }        });
调用了
startActivityForResult(camera, CAMERA);
之后就是存储修改图片的处理了。

开始有点着急,着急写Activity中的逻辑,但其实应该先将界面写好,上面是button,下方是imageview。这样看逻辑是否起作用的时候,才能确保不因为界面出错而导致错误。


Reference:

http://hxdawxyhxdawxy.iteye.com/blog/1452747

http://blog.sina.com.cn/s/blog_5da93c8f0101qu9w.html


3.保存图片并修改图片成黑白

用到了Bitmap

把数据写入图片文件:

 @Override    protected void onActivityResult(int requestCode, int resultCode, Intent data) {        super.onActivityResult(requestCode, resultCode, data);        if (requestCode == CAMERA && resultCode == Activity.RESULT_OK && null != data) {            String sdState = Environment.getExternalStorageState();            if(!sdState.equals(Environment.MEDIA_MOUNTED)){                Log.w("TestFile","SD card is not avaiable/writeable right now.");                return;            }            String filePath = Environment.getExternalStorageDirectory().getAbsolutePath() + "/" + System.currentTimeMillis()+ ".jpg";            Bundle bundle=data.getExtras();            Bitmap bm=(Bitmap)bundle.get("data");            FileOutputStream b  = null;            try {                b = new FileOutputStream(filePath);                bm.compress(Bitmap.CompressFormat.JPEG, 100, b);// 把数据写入文件            } catch (FileNotFoundException e) {                e.printStackTrace();            }            bm=switchColor(bm);            img.setImageBitmap(bm);        }    }
修改为黑白图片:

public Bitmap switchColor(Bitmap switchBitmap){        int width=switchBitmap.getWidth();        int height=switchBitmap.getHeight();        // Turn the picture black and white        Bitmap newBitmap=Bitmap.createBitmap(width,height,Bitmap.Config.ARGB_8888);        Canvas canvas=new Canvas(newBitmap);        canvas.drawBitmap(switchBitmap, new Matrix(), new Paint());        int current_color,red,green,blue,alpha,avg=0;        for (int i=0;i=210){  //亮度:avg>=126                    //设置颜色                    newBitmap.setPixel(i, j, Color.argb(alpha, 255, 255, 255));// white                } else if (avg<210 && avg>=80){  //avg<126 && avg>=115                    newBitmap.setPixel(i, j, Color.argb(alpha, 108,108,108));//grey                }else{                    newBitmap.setPixel(i, j, Color.argb(alpha, 0, 0, 0));// black                }            }        }        return newBitmap;    }

Reference:

http://blog.csdn.net/bill_ming/article/details/7730305

http://blog.csdn.net/yubo_725/article/details/39576485

http://blog.sina.com.cn/s/blog_618199e60101o4i1.html

http://download.csdn.net/detail/stop_pig/8211315#comment

http://www.tuicool.com/articles/NbyIfiy

http://www.cnblogs.com/over140/archive/2011/11/21/2256727.html

http://jameskaron.iteye.com/blog/2185470

http://www.2cto.com/kf/201503/379757.html

http://blog.sina.com.cn/s/blog_8a86f4dd01018jde.html


4.future work

(1)和网上说的一样,确实出现了图片不清晰的问题,因为呈现了缩略图。那么可将图片存入sd卡,再处理。

http://my.oschina.net/u/1251149/blog/326839

(2)转换成黑白图片算法2:

public static Bitmap convertToBlackWhite(Bitmap bmp) {    int width = bmp.getWidth(); // ªÒ»°ŒªÕºµƒøÌ    int height = bmp.getHeight(); // ªÒ»°ŒªÕºµƒ∏fl    int[] pixels = new int[width * height]; // Õ®π˝ŒªÕºµƒ¥Û–°¥¥Ω®œÒÀÿµ„ ˝◊È    bmp.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) (red * 0.3 + green * 0.59 + blue * 0.11);            grey = alpha | (grey << 16) | (grey << 8) | grey;            pixels[width * i + j] = grey;        }    }    //–¬Ω®Õº∆¨    Bitmap newBmp = Bitmap.createBitmap(width, height, Config.RGB_565);    //…Ë÷√Õº∆¨ ˝æ›    newBmp.setPixels(pixels, 0, width, 0, 0, width, height);    Bitmap resizeBmp = ThumbnailUtils.extractThumbnail(newBmp, 380, 460);    return resizeBmp;}

5.总结

(1)开始一直在SD卡上纠结,不能老是纠结在一个地方,如果一直想不通,要换一个思路。

(2)一开始就是参考网上的代码都没有弄懂,搞了两个

 Intent camera = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);  

跟对Android不熟悉了也有关系。


6.future reading

(1)如果要系统的学习,那么可以多去一些学习网站

http://wenku.baidu.com/link?url=01J7boU0wx7WEsrdLci5Qa5eJTL5hIKsTm8R7a_sSV_4WwPKu1h0NzpeK0AIPbIwnCB5dvT_lpK3tMm8_KR0CsPojbrngjOUdmZyHY_bT_u

(2)Android中的资源表示:uri

http://www.cnblogs.com/hnrainll/archive/2011/11/15/2250136.html

(3)还是没太搞懂android中Internal Storage和External Storage的区别,是否是External Storage就代表SD卡呢?

http://www.2cto.com/kf/201408/329570.html

(4)Intent学习:http://www.cnblogs.com/hummersofdie/archive/2011/02/12/1952675.html

(5)startActivityForResult的用法和demo



更多相关文章

  1. Launcher3 总结
  2. (二) RIL 层分析
  3. Android注解-编译时生成代码 (APT)
  4. Android(安卓)Studio安装使用教程\环境搭建\常见问题汇总
  5. android Splashy Flash小游戏
  6. 旋屏时,OnCreate方法重复调用的解决
  7. Android中抓取手机视频流数据
  8. imageView中图片各种比例类型的显示方式的参数设置
  9. 介绍MVP Model-View-Presenter在Android中的应用

随机推荐

  1. App开发日报 2015-05-19 Android依赖注入
  2. android 通知栏背景颜色跟随app导航栏背
  3. android关于获取摄像头帧数据转成图片
  4. Activity学习(一):生命周期
  5. android rom 制作
  6. Android 解决界面底部弹出dialog被虚拟按
  7. android_开发_EditText_and_TextView属性
  8. Android Testing(1) 浅尝Android测试的奥
  9. android WebView, WebChromeClient跟WebV
  10. Android的四大组件之一--Service(一)