关闭

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

标签: android图片截取与缩放
399人阅读 评论(0) 收藏 举报
分类:

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

       

        代码如下:

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);


    }


}


1
0
查看评论

android开发步步为营之83:android图片处理技术之二(通过Matrix移动缩放旋转错切)

Android中matrix是一个3*3的矩阵,用来对图片进行处理,它可以与Bitmap或者Canvas一起使用。使用它能对图形进行移动、缩放、旋转、错切变换。直接上代码比较清晰。         一、和Bitmap一起使用     ...
  • figo0423
  • figo0423
  • 2015-11-16 00:05
  • 572

android开发步步为营之56:Android开发常见问题技术点总结之一

android开发过程中常见问题技术点总结
  • figo0423
  • figo0423
  • 2015-04-27 15:02
  • 1439

android开发步步为营之84:selector与shape的结合使用

在界面开发设计过程中,我们经常有按钮点击前与点击后的效果,这个时候,就必须使用selector了,而有时候,美工偷懒不给你设计按钮图片背景的时候,那么我们就需要自己使用shape来画了,shape支持画矩形和椭圆,圆形。所以这两项技术,我们是经常需要使用的。selector和shape设计的xml,...
  • figo0423
  • figo0423
  • 2015-11-24 22:00
  • 464

步步为营-墙棋AI人机对战(Android)

放纵了三天了,之前写了一半懒得去动的墙棋,反而在这几天间隙断断续续完成了,也是挺可笑的。 简介-关于墙棋 路墙棋(Quoridor),或译墙棋、步步为营,是由Mirko Marchesi(米尔科·迈凯西)设计、Gigamic Games发行的两到四人对战的棋类游戏(桌面游戏),并在...
  • to_be_better
  • to_be_better
  • 2016-08-01 19:30
  • 1612

android开发步步为营之90:android图片处理技术之三(Gradient渐变图片的绘制)

我想大家在开发的时候,经常会看到UED会设计渐变颜色的产品需求,当然如果图片不需要动态更换,直接使用UED设计的渐变色的图片就可以了,但是很多时候,像我们最近项目里面,就有根据不同的皮肤,渐变色是不一样的,我们总不能有几十种皮肤就让UED设计几十张渐变色的图片放到项目里,一方面这样不灵活,另外会增加...
  • figo0423
  • figo0423
  • 2016-01-07 12:06
  • 1238

图片截取与缩放

package com.zf.image; import java.awt.Graphics2D; import java.awt.Image; import java.awt.Point; import java.awt.RenderingHints; import java.awt.image...
  • is_zhoufeng
  • is_zhoufeng
  • 2013-09-23 13:57
  • 786

android开发步步为营之20:网络设置

网络设置这块在手机应用里面是非常重要的一块,因为一般应用都需要和外部网络做交互的。本篇文章就展示了一个比较经典应用场景。比如我最近在开发的转账应用。这个是需要和网络交互的。当用户打开应用之后,应用首先会判断用户是否已经打开wifi或者gprs网络。没有则跳转到系统的无线和网络设置界面,当用户设置好了...
  • figo0423
  • figo0423
  • 2014-09-23 21:19
  • 760

【自学C++】魔兽世界之一:备战

学校的C++讲的实在太扯,于是ji
  • u014025300
  • u014025300
  • 2014-04-06 16:34
  • 5330

阿里巴巴技术笔试心得《技术之瞳》例题错误答案汇总(持续更新)

技术之瞳简介 初衷 例题错误答案汇总 P25 2211.《技术之瞳》简介 《技术之瞳——阿里巴巴技术笔试心得》由阿里巴巴集团校园招聘笔试项目组所著,收集了阿里历年校招中的精华笔试题,涉 及多个领域。《技术之瞳——阿里巴巴技术笔试心得》中内容大量结合了阿里巴巴的实际工作场景,以例题、解析、习题的形...
  • kimixuchen
  • kimixuchen
  • 2017-01-24 17:37
  • 3880

Speex之一-介紹Speex

Speex之一-介紹Speex 介紹Speex Speex編解碼器(www.speex.org)存在是因為有這麼一個需求,即是開源同時專利版權也是免費的。這應該也是各開源軟體的必要條件。本質上講,Speex是針對語音的,vorbis是針對語音/音樂的。不像很多基它編碼,Speex不是為移動手機設...
  • zsJum
  • zsJum
  • 2012-04-20 17:38
  • 6784
    个人资料
    • 访问:212684次
    • 积分:3620
    • 等级:
    • 排名:第10740名
    • 原创:151篇
    • 转载:30篇
    • 译文:0篇
    • 评论:30条
    最新评论