Android图像处理(三)通过矩阵变换实现图像变形特效
16lz
2021-01-26
图像色彩变化----矩阵法和像素点法
图像变换----矩阵法与像素块法
图像变换----画笔风格法
矩阵变换
|A B C|
|D E F|
|G H I |
A、E控制缩放
C、F控制平移
B、D控制错切
在onCreate中无法获取宽高
ImageMatrixView.java
public class ImageMatrixView extends View { private Bitmap mBitmap; private Matrix mMatrix; public ImageMatrixView(Context context) { super(context); initView(); } public ImageMatrixView(Context context, AttributeSet attrs) { super(context, attrs); initView(); } public ImageMatrixView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); initView(); } private void initView() { mBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher); setImageMatrix(new Matrix()); } public void setImageMatrix(Matrix matrix) { mMatrix = matrix; } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); //原图 canvas.drawBitmap(mBitmap, 0, 0, null); //对比图 canvas.drawBitmap(mBitmap, mMatrix, null); }}
matrix.xml
<?xml version="1.0" encoding="utf-8"?>
矩阵变换----Android API
matrix.setRotate()----旋转
matrix.setTranslate()----平移
matrix.setScale()----缩放
matrix.setSkew()----错切
post----矩阵组合
ImageMatrixTest.java
public class ImageMatrixTest extends Activity { private GridLayout mGridLayout; private ImageMatrixView mImageMatrixView; private int mEdWidth; private int mEdHeight; private float[] mImageMatrix = new float[9]; private EditText[] mEts = new EditText[9]; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.matrix); mImageMatrixView = (ImageMatrixView) findViewById(R.id.view); mGridLayout = (GridLayout) findViewById(R.id.grid_group); mGridLayout.post(new Runnable() { @Override public void run() { mEdWidth = mGridLayout.getWidth() / 3; mEdHeight = mGridLayout.getHeight() / 3; addEts(); initImageMatrix(); } }); } private void addEts() { for (int i = 0; i < 9; i++) { EditText et = new EditText(ImageMatrixTest.this); //居中显示 et.setGravity(Gravity.CENTER); mEts[i] = et; mGridLayout.addView(et, mEdWidth, mEdHeight); } } /** * 初始矩阵 * 1 0 0 * 0 1 0 * 0 0 1 */ private void initImageMatrix() { for (int i = 0; i < 9; i++) { if (i % 4 == 0) { mEts[i].setText(String.valueOf(1)); } else { mEts[i].setText(String.valueOf(0)); } } } private void getImageMatrix() { for (int i = 0; i < 9; i++) { EditText ed = mEts[i]; mImageMatrix[i] = Float.parseFloat(ed.getText().toString()); } } public void change(View view) { getImageMatrix(); Matrix matrix = new Matrix();// matrix.setValues(mImageMatrix);// //X轴偏移量,Y轴偏移量// matrix.setTranslate(150, 150); matrix.setScale(2, 2); matrix.postTranslate(200, 200); //矩阵先乘和后乘是不一样的 mImageMatrixView.setImageMatrix(matrix); mImageMatrixView.invalidate(); } public void reset(View view) { initImageMatrix(); getImageMatrix(); Matrix matrix = new Matrix(); matrix.setValues(mImageMatrix); mImageMatrixView.setImageMatrix(matrix); mImageMatrixView.invalidate(); }}
更多相关文章
- 移动架构39_RxAndroid二(变换调用:map、flatMap、lift、compose)
- Android实现支持缩放平移图片
- 2011.10.13(2)——— android Matrix学习03
- Android闪闪发光字体效果
- Android(安卓)ApiDemo学习(四)Views——1 animation
- Android(安卓)EditText 下换线颜色变换
- Android图片处理(Matrix,ColorMatrix) -
- Android(安卓)OpenGL详解一
- 完美实现音乐播放器锁屏页