gpt4 book ai didi

android - 仅在垂直方向倾斜位图

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:54:00 25 4
gpt4 key购买 nike

我想倾斜(如果这不是正确的词,请纠正我)位图,使其看起来有深度。形象化我所要求的一个好方法是星球大战的学分如何倾斜以显示深度。

我尝试了以下方法:

canvas.getMatrix().postSkew(kx,ky,px,py);

canvas.skew(sx,sy);

但我并没有取得太大的成功。上述方法似乎总是将位图转换为平行四边形。有没有办法将位图转换为梯形?

这是我从 Romain 指出的示例中摘取的一段代码。

canvas.rotate(-mOrientation[0] + mHeading, mCenterX, mCenterY);

camera.save();

if (mReverse) {
camera.translate(0.0f, 0.0f, mDepthZ * interpolatedTime);
} else {
camera.translate(0.0f, 0.0f, mDepthZ * (1.0f - interpolatedTime));
}

camera.rotateX(mOrientation[1]);
camera.applyToCanvas(canvas);
canvas.drawPath(mPath, mPaint);
canvas.drawCircle(mCenterX, mCenterY, mRadius - 37, mPaint);

camera.restore();

最佳答案

我今天花了很多时间研究这个(遇到了同样的问题)并想出了下面的代码。

需要注意的关键一点是,您需要将 preTranslate() 和 postTranslate() 设置到 Canvas 区域的中心(或其他位置)。这似乎意味着它使用图像的中心来应用变换,而不是默认使用左上角 (x=0,y=0)。这就是为什么您会得到一个平行四边形而不是您所期望的梯形(感谢您教我它们的名称)。

我发现的另一件重要的事情是 Canvas /相机上的保存/恢复功能。基本上,如果您连续调用旋转函数 3 次而不每次都恢复状态,则每次绘制时您都会不停地旋转对象。那可能就是您想要的,但我当然没有。这同样适用于 Canvas ,因为您基本上是将来自 Camera 对象的 Matrix 应用到 Canvas 并且需要重置它,否则会发生同样的事情。

希望这对某人有所帮助,这对初学者来说没有很好的记录。提示任何阅读本文的人,请查看 SDK 示例中的 APIDemos 文件夹。还有一个 Rotate3dAnimation.java 文件也演示了这一点。

//Snippet from a function used to handle a draw
mCanvas.save(); //save a 'clean' matrix that doesn't have any camera rotation in it's matrix
ApplyMatrix(); //apply rotated matrix to canvas
Draw(); //Does drawing
mCanvas.restore(); //restore clean matrix
//

public void ApplyMatrix() {
mCamera.save();
mCamera.rotateX(-66);
mCamera.rotateY(0);
mCamera.rotateZ(0);
mCamera.getMatrix(mMatrix);

int CenterX = mWidth / 2;
int CenterY = mHeight / 2;
mMatrix.preTranslate(-CenterX, -CenterY); //This is the key to getting the correct viewing perspective
mMatrix.postTranslate(CenterX, CenterY);

mCanvas.concat(mMatrix);
mCamera.restore();
}

关于android - 仅在垂直方向倾斜位图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5354183/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com