Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在代码中从许多较小的位图创建一个较大的位图? for(int i=0;i_Java_Android_Canvas_Bitmap - Fatal编程技术网

Java 如何在代码中从许多较小的位图创建一个较大的位图? for(int i=0;i

Java 如何在代码中从许多较小的位图创建一个较大的位图? for(int i=0;i,java,android,canvas,bitmap,Java,Android,Canvas,Bitmap,这是我用来在画布上绘制多个位图以创建平铺贴图的代码,但我不想使用canvas.drawbitmap,我想用它们制作一个大位图,而要使用位图支持的画布。创建一个正确大小的新位图,然后调用newcanvas(newBitmap)来创建一个绘制到该新位图的画布。然后将上面发布的代码与画布一起使用。如果所有位图都完美地平铺到一个矩形区域中,则可以按所需的尺寸创建一个新位图,以适合每个较小的位图,然后只需按正确的偏移量将每个较小位图中的像素复制到较大的位图中即可。您可以使用位图上的getPixel和set

这是我用来在画布上绘制多个位图以创建平铺贴图的代码,但我不想使用canvas.drawbitmap,我想用它们制作一个大位图,而要使用位图支持的画布。创建一个正确大小的新位图,然后调用newcanvas(newBitmap)来创建一个绘制到该新位图的画布。然后将上面发布的代码与画布一起使用。

如果所有位图都完美地平铺到一个矩形区域中,则可以按所需的尺寸创建一个新位图,以适合每个较小的位图,然后只需按正确的偏移量将每个较小位图中的像素复制到较大的位图中即可。您可以使用位图上的getPixel和setPixel来实现这一点。我不会讨论所有不同的优化策略,但这肯定是一个可行的解决方案,它完全不需要画布。

使用在二维像素阵列上迭代的“for”循环。从代码示例中可以看出,您已经熟悉for循环。
for (int i = 0; i < mYTileCount; i++) {
            for (int j = 0; j < mXTileCount; j++) {
                int num = mTileGrid[j][i];
                canvas.drawBitmap(Bitmap.createScaledBitmap(mTileArray[num],              mTileSize, mTileSize, false), mXOffset, mYOffset, mPaint);
                mXOffset+=mTileSize;
            }
            mXOffset = 0;
            mYOffset+=mTileSize;
        }