在Android中,如何移动位图?

在Android中,如何移动位图?,android,Android,我试图“移动”位图,但没有成功。通过“移位”,我的意思是:如果我有一个500x300,我把它向右移位50个像素,结果应该是一个500x300位图,其中每个像素向左移位50个像素,最右边的50个像素是空白的。因此,新图像与旧图像相同,只是左侧被裁剪,右侧附加空白区域。下面的代码成功地裁剪了左侧,但它不会在右侧生成空白区域,它只生成更窄的位图: Bitmap newBitmap = Bitmap.createBitmap(oldBitmap.getWidth(), m_CurrentBitmap.g

我试图“移动”位图,但没有成功。通过“移位”,我的意思是:如果我有一个500x300,我把它向右移位50个像素,结果应该是一个500x300位图,其中每个像素向左移位50个像素,最右边的50个像素是空白的。因此,新图像与旧图像相同,只是左侧被裁剪,右侧附加空白区域。下面的代码成功地裁剪了左侧,但它不会在右侧生成空白区域,它只生成更窄的位图:

Bitmap newBitmap = Bitmap.createBitmap(oldBitmap.getWidth(), m_CurrentBitmap.getHeight(), Config.ARGB_8888);
newBitmap = Bitmap.createBitmap(oldBitmap.getWidth(), deltaX, 0, oldBitmap.getWidth() - deltaX, oldBitmap.getHeight());
因此,我尝试创建一个具有所需尺寸的新位图,并手动设置像素(带有偏移)。然而,这仍然产生了一个较窄的位图,缺少右侧的空白区域:

Bitmap newBitmap = Bitmap.createBitmap(oldBitmap.getWidth(), oldBitmap.getHeight(), Config.ARGB_8888);

int[] oldPixels = new int[(int)(oldBitmap.getWidth() - deltaX) * oldBitmap.getHeight()];
            m_CurrentBitmap.getPixels(oldPixels, 0, (int) (oldBitmap.getWidth() - deltaX), (int)deltaX, 0, (int) (oldBitmap.getWidth() - deltaX), oldBitmap.getHeight());

newBitmap.setPixels(oldPixels, 0,  (int) (oldBitmap.getWidth() - deltaX), 0, 0, (int) (oldBitmap.getWidth() - deltaX), oldBitmap.getHeight());

编辑:好的,因此您基本上希望在新位图上绘制以下旧位图


您需要从
旧位图
像素从
deltaX
旧位图。宽度
新位图
像素从
0
新位图。宽度
-
deltaX
。这将使NewBitmap(
NewBitmap.Width
-
deltaX
NewBitmap.Width
)的右边空白(假设其后面的画布为白色或任何“空白”颜色)。

如果我使用deltaX作为偏移,则任何宽度>oldBitmap.getWidth()-deltaX将给出边界外异常。@ab11我至少用数学部分更新了我的回答,如果没有意义,请告诉我;)我不知道如何在代码中将仅绘制位图的某一部分转换为另一部分,因为我以前没有这样做过。