【问题标题】:How to set bitmap to canvas?如何将位图设置为画布?
【发布时间】:2015-02-17 10:36:27
【问题描述】:

我正在尝试使用 Path、Path.quadTo 和 Canvas 创建一个独特的形状,然后将位图传递给这个独特的形状。这个想法是方形位图将转换为画布的独特形状。我不确定这是否可能,但这是我想要完成的,这就是我如何解释将位图设置为画布的文档。将位图设置为画布时,我收到错误“UnsupportedOperationException”。位图在我的资源文件夹中。我错过了什么?

    @override
    protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);

    // get bitmap
    Bitmap mBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.squareImage);

    // set up Paint attributes
    Paint paint = new Paint();
    paint.setColor(Color.BLACK);
    paint.setStrokeWidth(5.of);
    paint.setStyle(Paint.Style.STROKE);
    paint.setStrokeCap(Paint.Cap.ROUND);
    paint.setAntiAlias(true);

    // set up path
    Path path = new Path();
    path.moveTo(x1, y1)

    // apply curve with quadTo function
    final float x2 = (x1 + x3)/2
    final float y2 = (y1 + y3)/2
    path.quadTo(x2, y2, x, y);

    // shape the canvas according to the path attributes
    canvas.drawPath(path, paint);

    }

    /* Note: at this point I have an unique shape. I now want to apply an image to this shape */

    // reference canvas passed into the onDraw() method and set to bitmap
    // canvas.setBitmap(mBitmap);

canvas.setBitmap(mBitmap) 会报错

02-17 08:43:27.168: E/AndroidRuntime(3438): java.lang.UnsupportedOperationException
02-17 08:43:27.168: E/AndroidRuntime(3438):     at android.view.HardwareCanvas.setBitmap(HardwareCanvas.java:39)
02-17 08:43:27.168: E/AndroidRuntime(3438):     at com.example.puzzledemo.activity.PathExample$PathView.onDraw(PathExample.java:90)

要添加一些上下文,重点是创建具有独特形状的拼图。如果这对我的最终目标有帮助的话。提前致谢!

【问题讨论】:

  • 您是要将画布上的图片保存为位图还是在画布上放置背景图像?
  • 我有一些方形图像,我想将它们变成拼图。所以我想在画布上放一张背景图片。

标签: android canvas android-canvas


【解决方案1】:

相信你在找canvas.drawBitmap

【讨论】:

  • 感谢您的回答。你能告诉我为什么你认为这个功能是我所需要的,而不是我一直试图实现的吗?也许添加一些关于如何在我的上下文中使用它的代码示例?我认为 canvas.drawBitmap 是用于绘制矩形/正方形形状,而不是像拼图那样的独特形状。
  • 这里是一些显示帮助的示例代码。我的建议是将位图绘制为矩形并应用蒙版。 stackoverflow.com/a/12637039/3508192这是最有可能解决您的问题的方法。
  • 谢谢。我知道您已经有了矩形位图,关键是您可以应用蒙版并将矩形“剪切”成拼图的形状。如果要将形状直接绘制到位图,则需要使用位图创建一个新的 Canvas(即 Canvas c = new Canvas(myBitmap); )并在其上进行绘制。这就是为什么你得到你的“UnsupportedOperationException”,你正在将位图设置为我认为绘制到屏幕的画布。你不能那样做。
  • 这点现在很清楚了@Solarnum。谢谢,您的面具解决方案有效。我现在只需要一些碎片来掩盖:-)。干杯!
【解决方案2】:

Portfoliobuilder,可用的油漆颜色之一是透明的。也许如果您使用矩形位图来表示每个部分,但在部分边界周围涂成透明,您可以获得不规则部分的外观,但仍然使用旨在用于矩形位图的 android 类?这可能会节省您的大量精力。您必须创建一个类来跟踪碎片的旋转方式、它们之间的距离以及匹配的边,但无论如何您都必须这样做。

【讨论】:

    猜你喜欢
    • 2013-02-25
    • 2018-01-05
    • 1970-01-01
    • 2021-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-22
    • 2011-10-03
    相关资源
    最近更新 更多