飞在江湖的专栏

《论语·子张第十九》,子夏曰:“博学而笃志,切问而近思,仁在其中矣。”...

android开发步步为营之81:android图片处理技术之一(截取与缩放)

       项目需要最近研究了一下图片处理的相关技术,本次分享一下截取与缩放的技术。效果图如下:

       

        代码如下:

package com.figo.study.activity;

import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Color;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;

import com.figo.study.R;
import com.nostra13.universalimageloader.core.decode.BaseImageDecoder;

public class BitmapApiActivity extends Activity {
    private ImageView ivTest, ivNew;
    private Button btnCut, btnScale;
    private String tag="BitmapApiActivity";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_bitmap_api);
        ivTest = (ImageView) findViewById(R.id.img_test);
        ivNew = (ImageView) findViewById(R.id.img_new);
        btnCut = (Button) findViewById(R.id.btn_cut);
        btnCut.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                cutImage();
            }
        });
        btnScale = (Button) findViewById(R.id.btn_scale);
        //图片缩放
        btnScale.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Bitmap bitmapSource = BitmapFactory.decodeResource(getResources(), R.mipmap.ab);
                Log.i(tag,"w="+bitmapSource.getWidth()+",h="+bitmapSource.getHeight());
                //Bitmap bitmapNew = Bitmap.createScaledBitmap(bitmapSource, 200, 200 * bitmapSource.getHeight() / bitmapSource.getWidth(), true);
                Bitmap bitmapNew = Bitmap.createScaledBitmap(bitmapSource, 600, 600 * bitmapSource.getHeight() / bitmapSource.getWidth(), true);

                ivNew.setImageBitmap(bitmapNew);
            }
        });

    }
    //从原图截取蒙版区域不透明部分的图片
    private void cutImage() {
        Bitmap bitmapSource = BitmapFactory.decodeResource(getResources(), R.mipmap.ab);

        int w = bitmapSource.getWidth();
        int h = bitmapSource.getHeight();
        int[] pixelsSource = new int[w * h];
        //获取原图所有像素
        bitmapSource.getPixels(pixelsSource, 0, w, 0, 0, w, h);


        Bitmap bitmapMask = BitmapFactory.decodeResource(getResources(), R.mipmap.facetype_0);
        int w1 = bitmapMask.getWidth();
        int h1 = bitmapMask.getHeight();
        int[] pixels1 = new int[w1 * h1];
        //获取蒙版所有像素
        bitmapMask.getPixels(pixels1, 0, w1, 0, 0, w1, h1);

        //扣出蒙版区域的原图 蒙版宽高为120*120px,蒙版中心点与原图中心点重合
        int total = w1 * h1;
        int xNew = (w - w1) / 2;
        int yNew = (h - h1) / 2;
        //参数为bitmap,x,y,w,h
        Bitmap bitmapSourceNew = Bitmap.createBitmap(bitmapSource, xNew, yNew, w1, h1);
        int[] sourceNew = new int[total];
        bitmapSourceNew.getPixels(sourceNew, 0, w1, 0, 0, w1, h1);


        int[] targetNew = new int[total];
        for (int i = 0; i < total; i++) {
            if (pixels1[i] != Color.TRANSPARENT)
                targetNew[i] = sourceNew[i];
        }
        Bitmap output = Bitmap.createBitmap(targetNew, w1, h1, Bitmap.Config.ARGB_8888);

        //显示截取的图片
        ivNew.setImageBitmap(output);


    }


}


阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/figo0423/article/details/49638635
想对作者说点什么? 我来说一句

Android图片处理.pdf

2009年08月14日 547KB 下载

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭