当前位置: 首页 > 知识库问答 >
问题:

如何在Android中使用位图(效果)?

卢雅惠
2023-03-14
protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        iv = (ImageView) findViewById(R.id.butterfly_image);
        iv.setImageBitmap(src);
        Button b = (Button) findViewById(R.id.button);
        b.setOnClickListener(this);
    }

public void onClick(View arg0) {
    iv = (ImageView) findViewById(R.id.butterfly_image);
    System.out.println("Inside onClick()");
    src = doHighlightImage(src);
    System.out.println("doHighlightImage has been passed");
    iv.setImageBitmap(src);
} 

public static Bitmap doHighlightImage(Bitmap src) {
        // create new bitmap, which will be painted and becomes result image
        Bitmap bmOut = Bitmap.createBitmap(src.getWidth() + 96, src.getHeight() + 96, Bitmap.Config.ARGB_8888);
        // setup canvas for painting
        Canvas canvas = new Canvas(bmOut);
        // setup default color
        canvas.drawColor(0, PorterDuff.Mode.CLEAR);

        // create a blur paint for capturing alpha
        Paint ptBlur = new Paint();
        ptBlur.setMaskFilter(new BlurMaskFilter(15, Blur.NORMAL));
        int[] offsetXY = new int[2];
        // capture alpha into a bitmap
        Bitmap bmAlpha = src.extractAlpha(ptBlur, offsetXY);
        // create a color paint
        Paint ptAlphaColor = new Paint();
        ptAlphaColor.setColor(0xFFFFFFFF);
        // paint color for captured alpha region (bitmap)
        canvas.drawBitmap(bmAlpha, offsetXY[0], offsetXY[1], ptAlphaColor);
        // free memory
        bmAlpha.recycle();

        // paint the image source
        canvas.drawBitmap(src, 0, 0, null);

        // return out final image
        return bmOut;
    }
12-25 16:14:45.150: I/System.out(13695): Inside onClick()
12-25 16:14:45.150: W/dalvikvm(13695): threadid=1: thread exiting with uncaught exception (group=0x4118d438)
12-25 16:14:45.160: E/AndroidRuntime(13695): FATAL EXCEPTION: main
12-25 16:14:45.160: E/AndroidRuntime(13695): java.lang.NullPointerException
12-25 16:14:45.160: E/AndroidRuntime(13695):    at com.example.effects.MainActivity.doHighlightImage(MainActivity.java:47)
12-25 16:14:45.160: E/AndroidRuntime(13695):    at com.example.effects.MainActivity.onClick(MainActivity.java:41)
12-25 16:14:45.160: E/AndroidRuntime(13695):    at android.view.View.performClick(View.java:4101)
12-25 16:14:45.160: E/AndroidRuntime(13695):    at android.view.View$PerformClick.run(View.java:17082)
12-25 16:14:45.160: E/AndroidRuntime(13695):    at android.os.Handler.handleCallback(Handler.java:615)
12-25 16:14:45.160: E/AndroidRuntime(13695):    at android.os.Handler.dispatchMessage(Handler.java:92)
12-25 16:14:45.160: E/AndroidRuntime(13695):    at android.os.Looper.loop(Looper.java:137)
12-25 16:14:45.160: E/AndroidRuntime(13695):    at android.app.ActivityThread.main(ActivityThread.java:4954)
12-25 16:14:45.160: E/AndroidRuntime(13695):    at java.lang.reflect.Method.invokeNative(Native Method)
12-25 16:14:45.160: E/AndroidRuntime(13695):    at java.lang.reflect.Method.invoke(Method.java:511)
12-25 16:14:45.160: E/AndroidRuntime(13695):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:798)
12-25 16:14:45.160: E/AndroidRuntime(13695):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:565)
12-25 16:14:45.160: E/AndroidRuntime(13695):    at dalvik.system.NativeStart.main(Native Method)

我还从StackOverFlow上的一些帖子中了解到,http://xjaphx.wordpress.com上的一些示例并没有像预期的那样工作。任何帮助都将不胜感激。圣诞快乐.

共有1个答案

陈野
2023-03-14

我猜您的src位图变量是null。您需要如下所示分配图像:您不需要初始化ImageView两次,因为您已经在oncreate()中声明了它

如下所示更改您的onClick代码:

要从ImageView获取图像,您需要如下所示获取图像:

Bitmap src= ((BitmapDrawable)iv.getDrawable()).getBitmap();

public void onClick(View arg0) {

     System.out.println("Inside onClick()");
    src = doHighlightImage(src);
    System.out.println("doHighlightImage has been passed");
    iv.setImageBitmap(src);
} 
 类似资料:
  • 基本上,我有一个矩形位图,并希望创建一个新的正方形尺寸的位图,其中将包含其中的矩形位图。 因此,例如,如果源位图的宽度:100和高度:400,我想要一个宽度:400和高度:400的新位图。然后,绘制以这个新位图为中心的源位图(请参阅附加图像以更好地理解)。 我下面的代码很好地创建了方形位图,但没有将源位图绘制到其中。结果,我留下了一个完全黑色的位图。 这是代码: 知道我哪里做错了吗?

  • 问题内容: 我正在使用谷歌地图,我需要更改“我的位置”(当前位置按钮)的位置。当前当前位置按钮在右上角。因此,请帮助我如何在Google地图屏幕上重新定位当前位置按钮。提前致谢。 我的示例代码: 问题答案: 你可以用这个

  • 我正在尝试从我与ARCore的ARSession的当前帧中获取位图。但它总是等于空。我已经在网上搜索了好一阵子,但不能弄清楚我做错了什么。 我正在从我的的中获取,我使用它来显示相机图像。除了我的位图等于空之外,所有的工作都很好。 我正在使用一个按钮,这样就只使用了一个帧,如下所示: 、和都不等于NULL。 可能有问题吗? 多谢

  • 问题内容: 我想创建一个缩放的位图,但似乎得到了不成比例的图像。我想要矩形时,看起来像正方形。 我的代码: 我希望图像的最大值为960。我该怎么做?将width设置为不会编译。这可能很简单,但我无法将其包裹住。谢谢 问题答案: 如果你已经在内存中的原始位图,你并不需要做的全过程,等你只需要搞清楚什么比使用和规模相应。 如果此图像的唯一用途是缩放版本,则最好使用Tobiel的答案,以最大程度地减少内

  • 我的目标是通过Scratch创建一个扫描仪应用程序。为了做到这一点,我正在使用Java android中的CameraX库。假设我已经检测到了页面的边角。图像捕获后,我如何对图像执行变换矩阵乘法?(除了尝试在Java中这样做外,我遵循了这里提到的算法)我需要一个矩阵中的图像,这样我就可以用我的3x3变换矩阵乘以每个像素位置,比如[I,j,1]来得到新的位置。然后,我会有另一个矩阵,在那里我记录像素

  • 我想在地图上用针点显示我现在的位置。我想使用API v2,但我不知道如何使用这个API v2,以及如何实现它。

  • 问题内容: 如果我有一个大的位图文件,该文件通常会生成“内存不足”异常,那么如何将其加载为图块?例如,我有一个10,000x10,000的图片,我想将其拆分为一个10x10的网格,其中包含1,000x1,000像素的图块。 我已经看过该功能,但是它需要我的大图像作为源输入。 如何在不完全加载输入图像的情况下从输入图像获取图块? 问题答案: Romain Guy的回答“是否有可能将位图切成小块而无需

  • 我试图实现当前位置地图应用程序,我正在加载地图碎片,但它需要纬度和经度值来定位地址...如何实现当前位置地图功能...提前感谢.. 这是我的地图片段。