Android 如何从imageview获得可绘制并转换为位图?

Android 如何从imageview获得可绘制并转换为位图?,android,bitmap,picasso,Android,Bitmap,Picasso,我已经创建了一个从facebook加载图片的应用程序。我用毕加索。毕加索将图像结果设置为“我的图像视图”。我想把图像转换成位图 以下是我从Facebook获取图像的代码: URL imageURL = new URL("https://graph.facebook.com/"+id+"/picture?type=large"); Picasso.with(getBaseContext()).load(imageURL.toString()).into(Imag

我已经创建了一个从facebook加载图片的应用程序。我用毕加索。毕加索将图像结果设置为“我的图像视图”。我想把图像转换成位图

以下是我从Facebook获取图像的代码:

 URL imageURL = new URL("https://graph.facebook.com/"+id+"/picture?type=large");                
 Picasso.with(getBaseContext()).load(imageURL.toString()).into(ImageView);
下面是我的代码,用于获取图像并转换为位图:(不工作)

ImageView.getDrawable()
始终返回null

我需要你的帮助。
谢谢

将图像加载到ImageView中是否有效?可能发生的情况是,在毕加索完成图像加载之前调用ImageView.getDrawable()。什么时候调用getDrawable代码?试着做一些类似的事情:

Picasso.with(getBaseContext()).load(imageURL.toString())
  .into(ImageView, new com.squareup.picasso.Callback() {
      @Override
      public void onSuccess() {
          BitmapDrawable drawable = (BitmapDrawable) ImageView.getDrawable();
          ...
      }

      @Override
      public void onError() {

      }
});

将图像加载到ImageView中是否有效?可能发生的情况是,在毕加索完成图像加载之前调用ImageView.getDrawable()。什么时候调用getDrawable代码?试着做一些类似的事情:

Picasso.with(getBaseContext()).load(imageURL.toString())
  .into(ImageView, new com.squareup.picasso.Callback() {
      @Override
      public void onSuccess() {
          BitmapDrawable drawable = (BitmapDrawable) ImageView.getDrawable();
          ...
      }

      @Override
      public void onError() {

      }
});

这应该在异步任务中:

try {
    URL url = new URL("http://....");
    Bitmap image = BitmapFactory.decodeStream(url.openConnection().getInputStream());
} catch(IOException e) {
    System.out.println(e);
}

这应该在异步任务中:

try {
    URL url = new URL("http://....");
    Bitmap image = BitmapFactory.decodeStream(url.openConnection().getInputStream());
} catch(IOException e) {
    System.out.println(e);
}

您可以通过以下代码来完成

 ImageView img;
 img.setDrawingCacheEnabled(true);
 Bitmap scaledBitmap = img.getDrawingCache();

您可以通过以下代码来完成

 ImageView img;
 img.setDrawingCacheEnabled(true);
 Bitmap scaledBitmap = img.getDrawingCache();

你应该使用毕加索的API来完成你想要做的事情

一个选项是提供一个
Target
侦听器,在
ImageView
上设置位图之前执行
Bitmap
操作,如下所示:

Picasso.with(getBaseContext())
        .load("https://graph.facebook.com/" + id + "/picture?type=large")
        .into(new Target() {
            @Override
            public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
                // Manipulate image and apply to ImageView
            }

            @Override
            public void onBitmapFailed(Drawable errorDrawable) {

            }

            @Override
            public void onPrepareLoad(Drawable placeHolderDrawable) {

            }
        });
或者更好的方法是,使用
毕加索
执行调整大小操作,不要自己进行任何
位图
操作,例如:

Picasso.with(getBaseContext())
        .load("https://graph.facebook.com/" + id + "/picture?type=large")
        .resize(70, 70)
        .into(ImageView);

你应该使用毕加索的API来完成你想要做的事情

一个选项是提供一个
Target
侦听器,在
ImageView
上设置位图之前执行
Bitmap
操作,如下所示:

Picasso.with(getBaseContext())
        .load("https://graph.facebook.com/" + id + "/picture?type=large")
        .into(new Target() {
            @Override
            public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
                // Manipulate image and apply to ImageView
            }

            @Override
            public void onBitmapFailed(Drawable errorDrawable) {

            }

            @Override
            public void onPrepareLoad(Drawable placeHolderDrawable) {

            }
        });
或者更好的方法是,使用
毕加索
执行调整大小操作,不要自己进行任何
位图
操作,例如:

Picasso.with(getBaseContext())
        .load("https://graph.facebook.com/" + id + "/picture?type=large")
        .resize(70, 70)
        .into(ImageView);

为什么不让毕加索在检索位图时给你它呢?但我看到它的参数是imageview。您的想法是将imageview转换为位图?毕加索可以做多种选择。查看和。为什么不让毕加索在检索位图时给你它呢?但我看到它的参数是imageview。您的想法是将imageview转换为位图?毕加索可以做多种选择。再见,谢谢。它可以工作,但我们需要使用AsyncTask.:)非常感谢。它可以工作,但我们需要使用AsyncTask.:)