gpt4 book ai didi

android - 分割和重新加入位图

转载 作者:行者123 更新时间:2023-11-29 21:37:07 25 4
gpt4 key购买 nike

我正在编写一个处理大型位图的 Android 应用程序,需要将位图拆分为单独的“图 block ”并单独处理每个图 block ,然后再将它们拼接成最终位图。

关于如何做到这一点的任何线索?我认为使用 createBitmap() 并在几个嵌套的 for 循环中指定较小的图 block 会很简单,但它并不像我想象的那么简单,因为 setPixels 并不像我想象的那样工作。

我遇到的一个难题是“图 block ”需要在它们不在较大位图边缘的地方重叠,因为处理过程需要在位图两侧看到几个额外的像素。如果不需要通过简单地在图像边缘添加几层黑色像素来分割图像,我会解决这个问题,但这对图 block 不起作用,因为它们需要实际周围像素的信息或处理将不起作用。

有没有更简单的方法来做到这一点?如果没有,我该如何使用 setPixels 和 createBitmap 来实现?

到目前为止我的代码:

        Bitmap finalImg = Bitmap.createBitmap(sourceImage.getWidth(), sourceImage.getHeight(), Bitmap.Config.ARGB_8888);  //Bitmap to store the final, processed image
Bitmap tile = null; //Temporary Bitmap to store tiles

int tileDiameter = 500; //Width and height of tiles
int borderWidth = 5; //Amount of pixel overlap from other tiles

for (int y = 0 ; y < sourceImage.getHeight() ; y += tileDiameter) {
for (int x = 0 ; x < sourceImage.getWidth() ; x += tileDiameter) {
if (x == 0) {
if (y == 0) {
tile = Bitmap.createBitmap(sourceImage, x, y, (tileDiameter + borderWidth), (tileDiameter + borderWidth));
}
else {
tile = Bitmap.createBitmap(sourceImage, x, (y - borderWidth), (tileDiameter + borderWidth), (tileDiameter + borderWidth));
}
}
else {
if (y == 0) {
tile = Bitmap.createBitmap(sourceImage, (x - borderWidth), y, (tileDiameter + borderWidth), (tileDiameter + borderWidth));
}
else {
tile = Bitmap.createBitmap(sourceImage, (x - borderWidth), (y - borderWidth), (tileDiameter + borderWidth), (tileDiameter + borderWidth));
}
}
processor.process(tile);
//I need to attach this (processed) tile to it's correct location in finalImg. How!??
}
}

最佳答案

您可以使用 Canvas.drawBitmap 将处理过的图 block 绘制回结果位图。使用这样的函数:

Canvas canvas = new Canvas(finalImg);
canvas.drawBitmap(tile,
null,
new Rect(x, y,
x + tileDiameter, y + tileDiameter),
null);

另请注意,您可能需要获取 tile 的可变副本,因为您从 Bitmap.createBitmap 获得的那个是不可变的。

关于android - 分割和重新加入位图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18175725/

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