Android中图像变换Matrix的原理应用,面试安卓系统架构

本文深入探讨了Android中Matrix的原理及其在图像变换中的应用,包括平移、旋转、缩放和错切等操作。通过示例代码展示了如何在Android中实现这些变换,适合作为面试准备或系统架构理解的学习资料。
摘要由CSDN通过智能技术生成
  1. canvas.drawBitmap(bitmap, matrix, null);

  2. super.onDraw(canvas);

  3. }

  4. @Override

  5. public void setImageMatrix(Matrix matrix)

  6. {

  7. this.matrix.set(matrix);

  8. super.setImageMatrix(matrix);

  9. }

  10. public Bitmap getImageBitmap()

  11. {

  12. return bitmap;

  13. }

  14. }

  15. public boolean onTouch(View v, MotionEvent e)

  16. {

  17. if(e.getAction() == MotionEvent.ACTION_UP)

  18. {

  19. Matrix matrix = new Matrix();

  20. // 输出图像的宽度和高度(162 x 251)

  21. Log.e(“TestTransformMatrixActivity”, "image size: width x height = " +  view.getImageBitmap().getWidth() + " x " + view.getImageBitmap().getHeight());

  22. // 1. 平移

  23. matrix.postTranslate(view.getImageBitmap().getWidth(), view.getImageBitmap().getHeight());

  24. // 在x方向平移view.getImageBitmap().getWidth(),在y轴方向view.getImageBitmap().getHeight()

  25. view.setImageMatrix(matrix);

  26. // 下面的代码是为了查看matrix中的元素

  27. float[] matrixValues = new float[9];

  28. matrix.getValues(matrixValues);

  29. for(int i = 0; i < 3; ++i)

  30. {

  31. String temp = new String();

  32. for(int j = 0; j < 3; ++j)

  33. {

  34. temp += matrixValues[3 * i + j ] + “\t”;

  35. }

  36. Log.e(“TestTransformMatrixActivity”, temp);

  37. }

  38. //          // 2. 旋转(围绕图像的中心点)

  39. //          matrix.setRotate(45f, view.getImageBitmap().getWidth() / 2f, view.getImageBitmap().getHeight() / 2f);

  40. //

  41. //          // 做下面的平移变换,纯粹是为了让变换后的图像和原图像不重叠

  42. //          matrix.postTranslate(view.getImageBitmap().getWidth() * 1.5f, 0f);

  43. //          view.setImageMatrix(matrix);

  44. //

  45. //          // 下面的代码是为了查看matrix中的元素

  46. //          float[] matrixValues = new float[9];

  47. //          matrix.getValues(matrixValues);

  48. //          for(int i = 0; i < 3; ++i)

  49. //          {

  50. //              String temp = new String();

  51. //              for(int j = 0; j < 3; ++j)

  52. //              {

  53. //                  temp += matrixValues[3 * i + j ] + “\t”;

  54. //              }

  55. //              Log.e(“TestTransformMatrixActivity”, temp);

  56. //          }

  57. //          // 3. 旋转(围绕坐标原点) + 平移(效果同2)

  58. //          matrix.setRotate(45f);

  59. //          matrix.preTranslate(-1f * view.getImageBitmap().getWidth() / 2f, -1f * view.getImageBitmap().getHeight() / 2f);

  60. //          matrix.postTranslate((float)view.getImageBitmap().getWidth() / 2f, (float)view.getImageBitmap().getHeight() / 2f);

  61. //

  62. //          // 做下面的平移变换,纯粹是为了让变换后的图像和原图像不重叠

  63. //          matrix.postTranslate((float)view.getImageBitmap().getWidth() * 1.5f, 0f);

  64. //          view.setImageMatrix(matrix);

  65. //

  66. //          // 下面的代码是为了查看matrix中的元素

  67. //          float[] matrixValues = new float[9];

  68. //          matrix.getValues(matrixValues);

  69. //          for(int i = 0; i < 3; ++i)

  70. //          {

  71. //              String temp = new String();

  72. //              for(int j = 0; j < 3; ++j)

  73. //              {

  74. //                  temp += matrixValues[3 * i + j ] + “\t”;

  75. //              }

  76. //              Log.e(“TestTransformMatrixActivity”, temp);

  77. //          }

  78. //          // 4. 缩放

  79. //          matrix.setScale(2f, 2f);

  80. //          // 下面的代码是为了查看matrix中的元素

  81. //          float[] matrixValues = new float[9];

  82. //          matrix.getValues(matrixValues);

  83. //          for(int i = 0; i < 3; ++i)

  84. //          {

  85. //              String temp = new String();

  86. //              for(int j = 0; j < 3; ++j)

  87. //              {

  88. //                  temp += matrixValues[3 * i + j ] + “\t”;

  89. //              }

  90. //              Log.e(“TestTransformMatrixActivity”, temp);

  91. //          }

  92. //

  93. //          // 做下面的平移变换,纯粹是为了让变换后的图像和原图像不重叠

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值