当前位置: 首页 > 面试题库 >

Android-在Canvas中绘制位图

满俊楠
2023-03-14
问题内容

我目前有一个迷宫游戏,它绘制一个5 x 5的正方形(占用屏幕的宽度并将其均匀分割)。然后,对于每个使用x和y坐标的框,我使用drawRect绘制彩色背景。

我遇到的问题是我现在需要在同一位置绘制图像,因此需要替换当前的纯背景色填充。

这是我当前用于drawRect的代码(一些示例):

// these are all the variation of drawRect that I use
canvas.drawRect(x, y, (x + totalCellWidth), (y + totalCellHeight), green);
canvas.drawRect(x + 1, y, (x + totalCellWidth), (y + totalCellHeight), green);
canvas.drawRect(x, y + 1, (x + totalCellWidth), (y + totalCellHeight), green);

然后,我还需要为画布中的所有其他正方形实现背景图像。该背景将在其顶部绘制简单的1px黑色线条,当前代码以灰色背景绘制。

background = new Paint();
background.setColor(bgColor);
canvas.drawRect(0, 0, width, height, background);

如果可以的话,请您提出建议。如果是这样,那么我最好的方法是这样做,同时尽量减少内存使用并拥有一张会扩大和缩小以填充相关正方形空间的图像(这在所有不同的屏幕尺寸上都会有所不同,因为它将整个屏幕分割开屏幕宽度均匀)。


问题答案:

使用Canvas方法public void drawBitmap (Bitmap bitmap, Rect src, RectF dst, Paint paint)。设置dst为要缩放整个图像的矩形的大小。

编辑:

这是在画布上以正方形绘制位图的可能实现。假设位图是二维数组(例如Bitmap bitmapArray[][];),并且画布是正方形的,因此正方形位图的宽高比不会失真。

private static final int NUMBER_OF_VERTICAL_SQUARES = 5;
private static final int NUMBER_OF_HORIZONTAL_SQUARES = 5;

    int canvasWidth = canvas.getWidth();
    int canvasHeight = canvas.getHeight();

    int squareWidth = canvasWidth / NUMBER_OF_HORIZONTAL_SQUARES;
    int squareHeight = canvasHeight / NUMBER_OF_VERTICAL_SQUARES;
    Rect destinationRect = new Rect();

    int xOffset;
    int yOffset;

    // Set the destination rectangle size
    destinationRect.set(0, 0, squareWidth, squareHeight);

    for (int horizontalPosition = 0; horizontalPosition < NUMBER_OF_HORIZONTAL_SQUARES; horizontalPosition++){

        xOffset = horizontalPosition * squareWidth;

        for (int verticalPosition = 0; verticalPosition < NUMBER_OF_VERTICAL_SQUARES; verticalPosition++){

            yOffset = verticalPosition * squareHeight;

            // Set the destination rectangle offset for the canvas origin
            destinationRect.offsetTo(xOffset, yOffset);

            // Draw the bitmap into the destination rectangle on the canvas
            canvas.drawBitmap(bitmapArray[horizontalPosition][verticalPosition], null, destinationRect, null);
        }
    }


 类似资料:
  • 我使用canvas在位图上绘制,并将位图覆盖在imageView上。 我已经画了一个基本的绘图在方法中被称为DrawGraph(),当用户触摸画布我必须画一个圆圈,因为我已经使用画布在onTouchEvent()方法,它没有画任何东西,代码是下面给出的,什么是问题,我如何解决这个问题。 我还尝试创建另一个位图,上面有一条直线,将新位图设置为在绘图()末尾的图像视图,并检查点击()。它显示新的位图(

  • 问题内容: 因此,我在我的draw方法中使用以下代码在Android地图中绘制了这个三角形: pointX_returned是我从字段中获取的坐标。它们基本上是经度和纬度。结果是一个漂亮的三角形,但内部人员为空,因此我可以看到地图。有办法以某种方式填充它吗? 问题答案: 您可能需要执行以下操作: 并将此颜色用于您的路径,而不是ARGB。确保路径的最后一点在第一个点结束,这也很有意义。 告诉我是否可

  • 在PhotoShop中有专门的效果工具,Canvas也提供了一些基本的效果接口。这种效果在画布中实现是很简单的,特别是现在你已经掌握了像素的操作方法。 反转颜色 这个效果将反转图像的颜色值。基本方法就是用255减去像素现在的颜色值(150),所得的就是反转后的颜色(255-150=105)。 让我们尝试一些不同的操作,然后看看最后的代码,这里并没有新知识。 var image = new Ima

  • 前面我们讲解了如何创建图形(shape)以及加载图像(image),这一节我们讲述如何通过像素操作从零开始创建图像。 要创建一些像素,需要调用2D渲染上下文的createImageData 方法。通过传入宽度和高度,它会返回一个包含所有常规属性的ImageData对象:width、height和(最重要的)data。data属性所包含的CanvasPixelArray 将保存新的像素,此时它们是不

  • 本文向大家介绍canvas绘制七巧板,包括了canvas绘制七巧板的使用技巧和注意事项,需要的朋友参考一下 效果如下所示: 代码分享: 以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持呐喊教程!

  • 问题内容: 我想绘制Java的Canvas,但由于我不知道自己在做什么而无法正常工作。这是我的简单代码: 窗口上没有任何内容。 我以为“画布”是纸而“图形”是我的铅笔是我的错吗?那是怎么回事? 问题答案: 意见建议: 不要使用Canvas,因为不要将AWT与Swing组件不必要地混合。 而是使用JPanel或JComponent。 不要通过调用组件来获取Graphics对象,因为获得的Graphi