有没有办法将图像作为位图加载到Glide

时间:2017-02-16 15:28:08

标签: android image-resizing android-glide image-scaling

我正在寻找一种方法来使用位图作为Glide的输入。我甚至不确定它是否可能。这是为了调整大小的目的。 Glide具有良好的图像增强功能。问题是我有资源作为位图已经加载到内存。我能找到的唯一解决方案是将图像存储到临时文件中,并将它们作为inputStream / file重新加载回Glide。有没有更好的方法来实现它?

请在回答之前..我不是在谈论Glide的输出.. .asBitmap().get()我知道。我需要输入帮助。

以下是我的解决方案:

 Bitmap bitmapNew=null;
        try {
            //
            ContextWrapper cw = new ContextWrapper(ctx);
            File directory = cw.getDir("imageDir", Context.MODE_PRIVATE);
            File file=new File(directory,"temp.jpg");
            FileOutputStream fos = new FileOutputStream(file);
            bitmap.compress(Bitmap.CompressFormat.PNG, 90, fos);
            fos.close();
            //
            bitmapNew = Glide
                    .with(ctx)
                    .load(file)
                    .asBitmap()
                    .diskCacheStrategy(DiskCacheStrategy.NONE)
                    .skipMemoryCache(true)
                    .into( mActualWidth, mActualHeight - heightText)
                    .get();

            file.delete();
        } catch (Exception e) {
            Logcat.e( "File not found: " + e.getMessage());
        }

我想避免将图像写入内部并再次加载它们。这就是为什么我会问是否有办法将输入作为位图

由于

11 个答案:

答案 0 :(得分:44)

对于版本4,您必须在asBitmap()

之前致电load()
GlideApp.with(itemView.getContext())
        .asBitmap()
        .load(data.getImageUrl())
        .into(new SimpleTarget<Bitmap>() {
            @Override
            public void onResourceReady(Bitmap resource, Transition<? super Bitmap> transition) {}
            });
        }

更多信息:http://bumptech.github.io/glide/doc/targets.html

答案 1 :(得分:16)

一个非常奇怪的案例,但我们试着解决它。我正在使用旧而不酷Picasso,但有一天我会试试Glide。 以下是一些可以帮助您的链接:

实际上这是一种残酷的但我认为有效的解决方法:

ByteArrayOutputStream stream = new ByteArrayOutputStream();
  yourBitmap.compress(Bitmap.CompressFormat.PNG, 100, stream);
  Glide.with(this)
      .load(stream.toByteArray())
      .asBitmap()
      .error(R.drawable.ic_thumb_placeholder)
      .transform(new CircleTransform(this))
      .into(imageview);

我不确定这是否会对您有所帮助,但我希望它能让您更接近解决方案。

答案 2 :(得分:12)

此解决方案适用于Glide V4。 你可以得到这样的位图:

Private Sub CommandButton1_Click()

    Set wb = ThisWorkbook
    lastRow = wb.Sheets("Sheet1").Range("A" & wb.Sheets("Sheet1").Rows.Count).End(xlUp).Row
    For i = 2 To lastRow
        r = wb.Sheets("Sheet1").Range("A" & i).Value

        If wb.Sheets("Sheet1").Range("A" & i).Value = wb.Sheets("Sheet1").Range("A" & i+1).Value
    Next i
End Sub

注意:这将阻止当前线程加载图像。

答案 3 :(得分:7)

根据Glide的最新版本,更改很少。现在,如果您不对submit()进行分类,则不会调用侦听器。现在,我们需要使用submit()将图像作为位图加载。

这是我今天使用的工作示例。

Glide.with(cxt)
  .asBitmap().load(imageUrl)
  .listener(new RequestListener<Bitmap>() {
      @Override
      public boolean onLoadFailed(@Nullable GlideException e, Object o, Target<Bitmap> target, boolean b) {
          Toast.makeText(cxt,getResources().getString(R.string.unexpected_error_occurred_try_again),Toast.LENGTH_SHORT).show();
          return false;
      }

      @Override
      public boolean onResourceReady(Bitmap bitmap, Object o, Target<Bitmap> target, DataSource dataSource, boolean b) {
          zoomImage.setImage(ImageSource.bitmap(bitmap));
          return false;
      }
  }
).submit();

它正在工作,我正在从侦听器获取位图。

答案 4 :(得分:5)

接受的答案适用于以前的版本,但在新版本的Glide中使用:

RequestOptions requestOptions = new RequestOptions();
requestOptions.placeholder(android.R.drawable.waiting);
requestOptions.error(R.drawable.waiting);
Glide.with(getActivity()).apply(requestOptions).load(imageUrl).into(imageView);

Courtesy

答案 5 :(得分:3)

这是另一个解决方案,它返回一个位图以设置到您的ImageView

Glide.with(this)
            .load(R.drawable.card_front)    // you can pass url too
            .asBitmap()
            .into(new SimpleTarget<Bitmap>() {
                @Override
                public void onResourceReady(Bitmap resource, GlideAnimation<? super Bitmap> glideAnimation) {
                    // you can do something with loaded bitmap here

                    imgView.setImageBitmap(resource);
                }
            });

答案 6 :(得分:3)

现在不推荐使用Glide的大多数API和方法。 以下适用于Glide 4.9和Android 10。

对于图像URI

  Bitmap bitmap = Glide
    .with(context)
    .asBitmap()
    .load(image_uri_or_drawable_resource_or_file_path)
    .submit()
    .get();

在build.gradle中如下使用Glide

implementation 'com.github.bumptech.glide:glide:4.9.0'

答案 7 :(得分:1)

这在最近的Glide版本中对我有用:

Glide.with(this)
        .load(bitmap)
        .dontTransform()
        .into(imageView);

答案 8 :(得分:0)

根据上述帖子,我的方法是值得的:

     Uri sArtworkUri = Uri.parse("content://media/external/audio/albumart");
Uri imageUri = Uri.withAppendedPath(sArtworkUri, String.valueOf(album_id));

然后在适配器中:

        //  loading album cover using Glide library

    Glide.with(mContext)
            .asBitmap()
            .load(imageUri)
            .into(holder.thumbnail);

答案 9 :(得分:0)

在科特林,

Glide.with(this)
            .asBitmap()
            .load("https://...")
            .addListener(object : RequestListener<Bitmap> {
                override fun onLoadFailed(
                    e: GlideException?,
                    model: Any?,
                    target: Target<Bitmap>?,
                    isFirstResource: Boolean
                ): Boolean {
                    Toast.makeText(this@MainActivity, "failed: " + e?.printStackTrace(), Toast.LENGTH_SHORT).show()
                    return false
                }

                override fun onResourceReady(
                    resource: Bitmap?,
                    model: Any?,
                    target: Target<Bitmap>?,
                    dataSource: DataSource?,
                    isFirstResource: Boolean
                ): Boolean {
                    //image is ready, you can get bitmap here
                    return false
                }

            })
            .into(imageView)

答案 10 :(得分:0)

请为此使用“实现”:

  

实现'com.github.bumptech.glide:glide:4.9.0'

     Glide.with(this)
     .asBitmap()
      .load(item.getMarkertOverlayImage())
    .into(new CustomTarget <Bitmap>() {   
@Override  
public void onResourceReady(@NonNull Bitmap resource, @Nullable Transition <? super Bitmap> transition) { 
                // you can do something with loaded bitmap here

 }
@Override 
public void onLoadCleared(@Nullable Drawable placeholder) { 
 } 
});