文档章节

图像处理-缩放-平移旋转等等

维特的烦恼
 维特的烦恼
发布于 2014/02/16 17:18
字数 483
阅读 62
收藏 0

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity" >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="缩放" />

        <SeekBar
            android:id="@+id/seekBar_scale"
            android:layout_width="200dp"
            android:layout_height="wrap_content"
            android:max="5"/>

        <TextView
            android:id="@+id/scale_data"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="1" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="旋转" />

        <SeekBar
            android:id="@+id/seekBar_rotate"
            android:max="360"
            android:layout_width="200dp"
            android:layout_height="wrap_content" />

        <TextView
            android:id="@+id/rotate_data"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="0°" />
    </LinearLayout>

     <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="平移" />

        <SeekBar
            android:id="@+id/seekBar_tran"
            android:max="100"
            android:progress="50"
            android:layout_width="200dp"
            android:layout_height="wrap_content" />

        <TextView
            android:id="@+id/tran_data"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="0" />
    </LinearLayout>
    
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:gravity="center" >
        <ImageView
            android:id="@+id/iv_2"
            android:src="@drawable/ic_launcher"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"/>
    </LinearLayout>

</LinearLayout>


package com.pas.image.tosmall;

import android.os.Bundle;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.view.Menu;
import android.widget.ImageView;
import android.widget.SeekBar;
import android.widget.TextView;
import android.widget.SeekBar.OnSeekBarChangeListener;

public class MainActivity extends Activity implements OnSeekBarChangeListener
{

	private ImageView iv2;
	private Bitmap basebitmap;
	private Bitmap scalebitmap;
	//缩放
	private SeekBar bar_scale;
	private TextView tv_scale;
	//旋转
	private SeekBar bar_rotate;
	private TextView tv_rotate;
	//平移
	private SeekBar bar_tran;
	private TextView tv_tran;
	@Override
	protected void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		iv2 = (ImageView) findViewById(R.id.iv_2);
		bar_scale=(SeekBar) findViewById(R.id.seekBar_scale);
		bar_rotate=(SeekBar) findViewById(R.id.seekBar_rotate);
		bar_tran=(SeekBar) findViewById(R.id.seekBar_tran);
		bar_scale.setOnSeekBarChangeListener(this);
		bar_rotate.setOnSeekBarChangeListener(this);
		bar_tran.setOnSeekBarChangeListener(this);
		tv_scale=(TextView) findViewById(R.id.scale_data);
		tv_rotate=(TextView) findViewById(R.id.rotate_data);
		tv_tran=(TextView) findViewById(R.id.tran_data);
		basebitmap = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher);
	}

	/**
	 * 缩放
	 */
	private void scale()
	{
		int scale=bar_scale.getProgress()+1;
		int degrees=bar_rotate.getProgress();
		int trans=bar_tran.getProgress();
		int width=basebitmap.getWidth()*scale+Math.abs(trans-50);
		int height=basebitmap.getHeight()*scale+Math.abs(trans-50);
		
		scalebitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
		Canvas canvas = new Canvas(scalebitmap);
		Paint paint = new Paint();
		paint.setStrokeWidth(5);
		paint.setColor(Color.BLACK);
		//消除锯齿
		paint.setAntiAlias(true);
		Matrix matrix = new Matrix();
		//缩放
		matrix.postScale(scale, scale);
		//旋转 度数(0-360) 基准点
		matrix.postRotate(degrees, width/2f, height/2f);
		//平移
		matrix.postTranslate(trans-50,trans-50);
		
		//镜像
		matrix.postScale(-1, 1);
		matrix.postTranslate(scalebitmap.getWidth(), 0);
		//倒影
		matrix.postScale(1, -1);
		matrix.postTranslate(0, scalebitmap.getHeight());
		canvas.drawBitmap(basebitmap, matrix, paint);
		iv2.setImageBitmap(scalebitmap);
	}
	
	@Override
	public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser)
	{
		if(seekBar==bar_scale)
		{
			tv_scale.setText(progress+1+"");
		}
		if(seekBar==bar_rotate)
		{
			tv_rotate.setText(progress+"゜");
		}
		if(seekBar==bar_tran)
		{
			tv_tran.setText(progress-50+"");
		}
		scale();
	}

	@Override
	public void onStartTrackingTouch(SeekBar seekBar)
	{
	}

	@Override
	public void onStopTrackingTouch(SeekBar seekBar)
	{
	}

}






© 著作权归作者所有

维特的烦恼
粉丝 20
博文 97
码字总数 42329
作品 0
天津
私信 提问
加载中

评论(1)

蹲角落画圈圈
蹲角落画圈圈
求源码
[Python图像处理] 六.图像缩放、图像旋转、图像翻转与图像平移

版权声明:本文为博主原创文章,转载请注明CSDN博客源地址!共同学习,一起进步~ https://blog.csdn.net/Eastmount/article/details/82454335 该系列文章是讲解Python OpenCV图像处理知识,前...

Eastmount
2018/09/06
0
0
Android画图之Matrix

Android画图之Matrix(一) Matrix ,中文里叫矩阵,高等数学里有介绍,在图像处理方面,主要是用于平面的缩放、平移、旋转等操作。 首先介绍一下矩阵运算。加法和减法就不用说了,太简单了,对...

Jerikc
2014/04/12
0
0
android动态绕可移动轴心旋转图片

这篇文章主要用于本人查阅资料所写。如果对你也有所帮助,那么也请你可以把更多更好的作品分享给所有开发人员,大家共同学习进步。再次,很感谢http://chroya.javaeye.com/blog/712078该文章...

鉴客
2011/11/25
3.2K
1
Android学习笔记进阶八之Matrix矩阵

Matrix,中文里叫矩阵,高等数学里有介绍,在图像处理方面,主要是用于平面的缩放、平移、旋转等操作。 在Android里面,Matrix由9个float值构成,是一个3*3的矩阵。最好记住。如下图: 解释一...

迷途d书童
2012/03/05
1K
1
[Python图像处理] 十二.图像几何变换之图像仿射变换、图像透视变换和图像校正

版权声明:本文为博主原创文章,转载请注明CSDN博客源地址!共同学习,一起进步~ https://blog.csdn.net/Eastmount/article/details/88679772 该系列文章是讲解Python OpenCV图像处理知识,前...

Eastmount
03/20
0
0

没有更多内容

加载失败,请刷新页面

加载更多

JAVA 8 中新增 lambda 表达式的一些基本应用

import java.util.Arrays;import java.util.List;import java.util.function.Function;import java.util.stream.Collectors;public class TestLambda { public static void......

这是一只小小鸟
5分钟前
0
0
Java向word中插入Excel文件对象

前言: 在word文件中,虽然也有表格。但是有时我们想要将Excel中表格的大量数据直接插入到word文档中,这就需要用到word的插入对象的功能,也就是直接将Excel文件当做对象插入到word中。 本地的...

qianxi
7分钟前
1
0
海量数据下的注册中心 - SOFARegistry 架构介绍

SOFAStack Scalable Open Financial Architecture Stack 是蚂蚁金服自主研发的金融级分布式架构,包含了构建金融级云原生架构所需的各个组件,是在金融场景里锤炼出来的最佳实践。 SOFARegi...

SOFAStack
9分钟前
6
0
python操作excel表格

python 对excel的操作 提示:如果需要写多个表,需要把多个表写完在保存,否则会出现表格覆盖问题 此程序 采取一边请求,一边存取,做个异常处理,即可保存已存在的数据 """# sheet的名称,...

鹏灬
12分钟前
0
0
好程序员web前端分享如何理解JS的单线程

好程序员web前端分享如何理解JS单线程,JS本质是单线程的。也就是说,它并不能像JAVA语言那样,两个线程并发执行。 但我们平时看到的JS,分明是可以同时运作很多任务的,这又是怎么回事呢? ...

好程序员IT
16分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部