在位图上绘制圆形。

5
我编写了一个应用程序,可以拍照并将其保存到SD卡上。然后我可以加载该图像到ImageView中进行显示。在显示之前,我想在位图上画一个圆。下面的代码显示了位图,但没有出现圆形。有什么想法为什么圆形不在那里吗?
谢谢。
BitmapFactory.Options bfo = new BitmapFactory.Options();
        bfo.inSampleSize = 5;
        Bitmap bm = BitmapFactory.decodeByteArray(imageArray, 0, imageArray.length, bfo);
        Log.e(TAG, bm.toString());
        //imageview.setImageBitmap(bm);


        Bitmap bmOverlay = Bitmap.createBitmap(bm.getWidth(), bm.getHeight(), bm.getConfig());
        canvas = new Canvas(bmOverlay);
        Paint paint = new Paint();
        paint.setColor(Color.RED);
        canvas.drawBitmap(bm, new Matrix(), null);
        canvas.drawCircle(750, 14, 11, paint);
        imageview.setImageBitmap(bmOverlay);
1个回答

6

您可以检查bm.getWidth。如果您使用了样本大小为5,则您的图像将比原始图像小5倍,导致您的圆圈消失在图像的右侧。

您可以尝试:

paint.setStrokeWidth(10);
canvas.drawCircle(50, 50, 25);

这只是一个简单的检查。


@matthew willis,谢谢你,现在它可以工作了。如果可以的话,我想请教您一些问题,因为您以前帮过我,而且似乎对图形学有相当深入的了解。我在图片上方有一个滑动条,并希望在移动滑动条时更改和重绘圆圈。目前,图片位于布局中透明的surfaceview之后的imageview中。这会使条形图浮在屏幕上。我想可能需要使用opengl来完成这个功能?您会使用哪些库呢? - turtleboy
你应该能够简单地监听滑动条(SeekBar?)中的更改,然后使绘制圆形的视图无效,并在新位置绘制它。我可能误解了你想做什么。 - Matthew
我想在图像上放置一个圆形,当滑动 seekbar 时,它会扭曲位图中的底层像素。我只是想逐步完成它。我已经使圆形具有透明内部,所以我只想重新排列圆形内部的像素,希望我已经解释清楚了。 - turtleboy
@matthew willis 你好,没错,那听起来是个好计划,也是我想尝试的。你能帮我澄清一些问题吗?目前我在一个相对布局中有一个SurfaceView和一些按钮(它们似乎漂浮在屏幕上)。就像你说的,我不需要使用ImageView,而是自定义一个View类,然后重写onDraw()方法。到目前为止还不错。但是如果我想要一个带有按钮的SurfaceView(所有按钮都在xml文件中声明),我是否需要在创建自定义View时使用xml文件,然后将其传递给我的活动中的setContentView()方法? - turtleboy
您可以在Java中或者XML布局中创建视图对象。 - Matthew
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接