u010477502
变身小甜甜
2015-05-21 08:47
采纳率: 40.5%
浏览 6.4k

android 在已有的图片上画矩形框

用已有图片做为背景,使用Canvas在该背景图片上画矩形框,然后加载此图片报以下错误:
Caused by: java.lang.IllegalStateException: Immutable bitmap passed to Canvas constructor。网上的解决办法都是加载res下的图片,对我这来说不起作用啊。
要实现的效果如下:
图片说明

请问实现此效果,大家是如何实现的?

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

5条回答 默认 最新

  • Green_shing
    狂发飘飘 2015-05-21 09:55
    已采纳

    应该是Immutable和mutable的问题,一个bitmap时有这个属性的:Immutable表示不可以修改,mutable表示可以修改.很显然,你需要一个属性为mutable(可以修改)的bitmap.一般情况下,我们获取的bitmap都是Immutable(不可以修改的),所以,你需要转换一下,得到一张可以修改的bitmap.然后就可以修改这行图片,绘制你需要的矩形框.

    点赞 评论
  • crazy1235
    月盡天明 2015-05-21 09:08

    你需要图像识别技术了
    Tesseract技术 和 Mezzofanti_java_code 你可以研究一下。、

    点赞 评论
  • zzkjliu
    zzkjliu 2015-05-21 13:10

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

    if (mBitmap != null) {
    if (mPX != null && mPY != null) {
    for (int i = 0; i < mPX.length; i++) {
    if (mDisplayStyle == 1) {
    canvas.drawRect(mPX[i] - dis/4, mPY[i] - dis/4, mPX[i] + dis/2, mPY[i] + dis/4, mPaint);
    }
    if (mDisplayStyle == 2) {
    canvas.drawRect(mPX[i] - dis/4, mPY[i] - dis/4, mPX[i] + dis/2, mPY[i] + dis/4, mPaint);
    }
    if (mDisplayStyle == 3) {
    canvas.drawRect(mPX[i] - dis/2, mPY[i] - dis/4, mPX[i] + dis/2, mPY[i] + dis/4, mPaint);
    }
    }

    点赞 评论
  • u010477502
    变身小甜甜 2015-05-22 09:47

    问题已解决,谢谢大家热情的帮忙,导致出错的原因和狂发飘飘 说的一样,解决办法可以查看我的博客:“android 在已有的图片上画矩形框”

    点赞 评论
  • ywj66666666
    ywj66666666 2015-07-16 05:35

    你好,我想在位图上画矩形或圆什么的,这样为什么实现不了
    图片说明
    求帮助,谢谢,我的QQ:2568889532

    点赞 评论

相关推荐