java - 如何在 Android 上旋转 Canvas 上的位图而不使其变形

标签 java android canvas bitmap rotation

我使用矩阵在 Canvas 上旋转位图,如下所示:

public void drawRotatedPixmap(Bitmap bitmap, int x, int y, int srcX, int srcY, int srcWidth, int srcHeight, int degrees)
{
    srcRect.left = srcX;
    srcRect.top = srcY;
    srcRect.right = srcX + srcWidth;
    srcRect.bottom = srcY + srcHeight;

    dstRect.left = x;
    dstRect.top = y;
    dstRect.right = x + srcWidth;
    dstRect.bottom = y + srcHeight;

    matrix.reset();
    matrix.setRotate(degrees, x+srcWidth/2, y+srcHeight/2);

    canvas.setMatrix(matrix);               
    canvas.drawBitmap(bitmap, srcRect, dstRect, null);
    canvas.setMatrix(null);
}

原始位图图像非常像素化,旋转它我得到这个:

enter image description here

通过这种方式,图像会重新缩放并且边缘非常明显。 我得到的结果如下:

enter image description here

可以通过在 Canvas 上绘图来完成此操作还是应该使用 openGL?

注意: Sprite 图像仅用于测试,取自 google

最佳答案

要获得更高的质量,请使用经过过滤的涂料:

Paint filterPaint = new Paint();
filterPaint.setFilterBitmap(true);
canvas.drawBitmap(bitmap, srcRect, dstRect, filterPaint);

关于java - 如何在 Android 上旋转 Canvas 上的位图而不使其变形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22582904/

相关文章:

java - Hibernate @OneToOne child 不坚持

java - 如何在 Java 中对 MS-Word 实现密码保护?

java - 从 Netbeans 启动 Tomcat 失败

android - AlarmManager 是否需要 WakefulBroadcastReceiver(或等效)

javascript - HTML5 Canvas 中的热变形/水下视觉效果

java - JUnit 5 中@RuleChain 的等价物是什么?

java - 比较方法违反了排序方法中的一般契约

c# - MediaPlayer 类中的 SetDataSource 从 Assets 或 raw 文件夹加载 mp3 文件

javascript - 鼠标悬停时图表与旧值重叠

javascript - 比 Processing.js 更 slim 的 Javascript Canvas 抽象