【问题标题】:Skew matrix in AndroidAndroid中的倾斜矩阵
【发布时间】:2014-08-13 13:15:43
【问题描述】:

我正在开发 Android 项目。我正在使用 View 类使用带有矩阵的画布绘制位图。

如何倾斜矩阵?变成这样:

我正在使用此代码,但它不起作用:

float[] src=new float[]{0,0,0,1,1,1,1,0};
float[] dst=new float[]{0.2f,0,0,1,1,1,0.8f,0};
Paint paint = new Paint();
matrix.reset();     
matrix.postTranslate(-width / 2.0f, -height / 2.0f);        
matrix.postRotate(0/*(float)(angle*180/Math.PI) ,-width / 2.0f + 50, -height / 2.0f +50*/);
matrix.postScale(scale, scale); 
matrix.setPolyToPoly(src, 0, dst, 0, 4);
matrix.postTranslate(position.getX(), position.getY());             
canvas.drawBitmap(bitmap, matrix, paint);
canvas.concat(matrix);

【问题讨论】:

  • Matrix.setPolyToPoly
  • 感谢您的回复,但您能否以简单的示例解释方法及其参数作为答案?
  • 例如使用 src 作为 0,0,0,1,1,1,1,0 和 dst 0.2,0,0,1,1,1,0.8,0
  • 请看上面的代码,哪里错了?
  • 使用工作代码查看我的答案

标签: android matrix view android-canvas


【解决方案1】:

使用这样的东西:

class V extends View {

    private Bitmap b;
    private Matrix m;

    public V(Context context) {
        super(context);
        b = BitmapFactory.decodeResource(getResources(), R.drawable.layer0);
        m = new Matrix();
    }

    @Override
    protected void onSizeChanged(int w, int h, int oldw, int oldh) {
        int bw = b.getWidth();
        int bh = b.getHeight();
        float[] src = {0, 0, 0, bh, bw, bh, bw, 0};
        int DX = 100;
        float[] dst = {0 + DX, 0, 0, h, w, h, w - DX, 0};
        m.setPolyToPoly(src, 0, dst, 0, 4);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        canvas.drawBitmap(b, m, null);
    }
}

更新以保持图像纵横比:

    @Override
    protected void onSizeChanged(int w, int h, int oldw, int oldh) {
        int bw = b.getWidth();
        int bh = b.getHeight();
        RectF src = new RectF(0, 0, bw, bh);
        RectF dst = new RectF(0, 0, w, h);
        m.setRectToRect(src, dst, ScaleToFit.CENTER);

        float[] pts = {0, 0, 0, bh, bw, bh, bw, 0, 0, 0, 0, 0, 0, 0, 0, 0};
        m.mapPoints(pts, 8, pts, 0, 4);
        int DX = 40;
        pts[8] += DX;
        pts[14] -= DX;
        m.setPolyToPoly(pts, 0, pts, 8, 4);
    }

【讨论】:

  • 非常感谢pskink,明天我会测试它,因为我现在没有设备,我会告诉你结果如何。
  • 查看更新以保持图像纵横比
猜你喜欢
  • 2011-03-14
  • 2021-09-18
  • 1970-01-01
  • 2023-03-23
  • 1970-01-01
  • 2020-07-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多