Android图像处理技术(实现Android中的PS)(四)

前三个博文都是讲解的图像色彩变换,从本博文开始,我们开始探讨图像变换

图像色彩变换的方法:矩阵法,像素点法 图像变换的方法:矩阵法,像素块法,画笔风格法:

今天我们主要介绍:矩阵法

首先上几张图,刷刷学好数学的重要性:

哈哈,爽不爽,自己看吧,下面的例子就是利用的这些知识。

今天的Demo是通过矩阵法对图像进行变换:

首先,上个效果图:

下面我们开始代码的编写工作,同样的,我在代码中加了大量注释,大家自己看看吧,不再另作解析了。

首先是布局文件:

==”vertical”>//自定义View,后面会讲到<com.chillax.test.ImageMatrixView=”0dp”android:layout_weight=”2″ />//装填矩阵<GridLayout==><LinearLayoutandroid:layout_width=”match_parent”android:layout_height=”wrap_content” ><Button==”change”android:text=”Change” /><Button==></LinearLayout>

下面是自定义的ImageMatrixView的代码:

/** * * 关于父类构造函数的继承问题,android开发者网站上有相关的说明文档: * public View (Context context)是在java代码创建视图的时候被调用,如果是从xml填充的视图,就不会调用这个 * public View (Context context, AttributeSet attrs)这个是在xml创建但是没有指定style的时候被调用 * public View (Context context, AttributeSet attrs, int defStyle)这个不用说也懂了吧 * */{private Bitmap mBitmap;private Matrix mMatrix;public ImageMatrixView(Context context, AttributeSet attrs) {super(context, attrs);initView();}(){mBitmap=BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher);setImageMatrix(new Matrix());}(Matrix matrix){mMatrix=matrix;}(Canvas canvas) {super.onDraw(canvas);//画两个图片,便于比较;canvas.drawBitmap(mBitmap, 0,0, null);canvas.drawBitmap(mBitmap, mMatrix, null);}}

接下来是Activity的代码:

{// 待改变的ImageViewprivate ImageMatrixView mImageView;// 创建矩阵private GridLayout mGridLayout;// 更改后的图片是个bitmap对象private Bitmap mBitmap;mEtWidth, mExHeight;// 装填这9个EditTextprivate EditText[] mExs = new EditText[9];[] mMatrix = new float[9];(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.image_matrix);// 从资源中加载一个图片mBitmap = BitmapFactory.decodeResource(getResources(),R.drawable.ic_launcher);// 你懂的mImageView = (ImageMatrixView) findViewById(R.id.imageView);mGridLayout = (GridLayout) findViewById(R.id.group);// 绘制完成后执行run()方法的内容mGridLayout.post(new Runnable() {() {mEtWidth = mGridLayout.getWidth() / 3;mExHeight = mGridLayout.getHeight() / 3;addEx();initMatrix();}});}(View view) {getImageMatrix();setImageMatrix();}(View view) {initMatrix();getImageMatrix();setImageMatrix();}() {for (int i = 0; i < 9; i++) {mMatrix[i] = Float.valueOf(mExs[i].getText().toString());}}() {Matrix matrix = new Matrix();matrix.setValues(mMatrix);mImageView.setImageMatrix(matrix);mImageView.invalidate();/** Rotate 旋转 Translate 平移 Scale 缩放 Skew 错切 Post 矩阵组合*/}() {for (int i = 0; i < 9; i++) {EditText editText = new EditText(ImageMatrix.this);mExs[i] = editText;mGridLayout.addView(editText, mEtWidth, mExHeight);}}() {for (int i = 0; i < 9; i++) {if (i % 4 == 0) {mExs[i].setText(String.valueOf(1));} else {mExs[i].setText(String.valueOf(0));}}}}

注释是最好的老师,Over。

最后,Demo地址:

,人生就是要感受美丽的善良的,丑恶的病态的。

Android图像处理技术(实现Android中的PS)(四)

相关文章:

你感兴趣的文章:

标签云: