使用矩阵转换位图



嘿,我在制作的一个应用程序中遇到了这个问题。我需要创建一个预先翻译的位图,这意味着从旧位图创建一个新位图,其中像素偏移了指定的量。我想我可以通过设置后置或预翻译的矩阵来实现这一点,但这些都不能移动像素或做任何可见的事情。

诸如旋转或缩放之类的函数可以处理位图并执行预期的操作。平移也适用于画布,但它不会移动位图像素,这正是我想要的。有可能做到吗?

我做错了什么吗?为什么translate函数不能在位图上工作?

这是一段代码,显示了我正在做的事情。

private void move(float dx, float dy) {
    moveX = (float) (dx*complexScale); 
    moveY = (float) (dy*complexScale);
    //canvasMatrix.setTranslate(dx,dy);
    if(!render.isAlive()) {
        focusX = focusX0 - dx*complexScale;
        focusY = focusY0 - dy*complexScale;
        bitmapMatrix.setTranslate(dx, dy);
        needRefresh = true;
    }
}
private void generate() {
    if (!render.isAlive()) {
        render = new Thread(generator);
        fractal = Bitmap.createBitmap(fractal,0,0,mapWidth,mapHeight,bitmapMatrix,true);
        setComplexAxis();
        render.start();
    }
}
翻译有两种方法。dx下方是X轴上的平移,dy下方是Y轴上的平动。其他变量应该是不言自明的。

1-图像内的平移(无旋转)

val newBitmap = Bitmap.createBitmap(originalBitmap, dx, dy, newWidth, newHeight, matrix, false)

2-复矩阵

 matrix.postTranslate(dx, dy)
 val newBitmap = Bitmap.createBitmap(newWidth, newHeight, Bitmap.Config.ARGB_8888)
 val canvas = Canvas(newBitmap)
 canvas.drawBitmap(originalBitmap, matrix, null)

这是一个老问题,但我想我仍然会回答,以帮助那些像我一样偶然发现它的人

翻译是在画布上完成的。我不完全确定你是否可以操纵像素。我建议为位图图像创建一个视图,并在视图的画布上应用翻译

最新更新