ventajas vectoriales vectorial usos una que programas para mapa imagenes imagen entre ejemplos edicion diferencia desventajas corel android android-glide

android - vectoriales - que es un mapa de bits en corel draw



¿Cómo se usa glide para descargar una imagen en un mapa de bits? (7)

Asegúrate de estar en la última versión

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

Kotlin:

Glide.with(this) .asBitmap() .load(imagePath) .into(object : CustomTarget<Bitmap>(){ override fun onResourceReady(resource: Bitmap, transition: Transition<in Bitmap>?) { imageView.setImageBitmap(resource) } override fun onLoadCleared(placeholder: Drawable?) { // this is called when imageView is cleared on lifecycle call or for // some other reason. // if you are referencing the bitmap somewhere else too other than this imageView // clear it here as you can no longer have the bitmap } })

Tamaño de mapa de bits:

si desea usar el tamaño original de la imagen, use el constructor predeterminado como se indicó anteriormente, de lo contrario, puede pasar el tamaño deseado para el mapa de bits

into(object : CustomTarget<Bitmap>(1980, 1080)

Java:

Glide.with(this) .asBitmap() .load(path) .into(new CustomTarget<Bitmap>() { @Override public void onResourceReady(@NonNull Bitmap resource, @Nullable Transition<? super Bitmap> transition) { imageView.setImageBitmap(resource); } @Override public void onLoadCleared(@Nullable Drawable placeholder) { } });

Vieja respuesta:

Con la compile ''com.github.bumptech.glide:glide:4.8.0'' y debajo

Glide.with(this) .asBitmap() .load(path) .into(new SimpleTarget<Bitmap>() { @Override public void onResourceReady(Bitmap resource, Transition<? super Bitmap> transition) { imageView.setImageBitmap(resource); } });

Para compile ''com.github.bumptech.glide:glide:3.7.0'' y abajo

Glide.with(this) .load(path) .asBitmap() .into(new SimpleTarget<Bitmap>() { @Override public void onResourceReady(Bitmap resource, GlideAnimation<? super Bitmap> glideAnimation) { imageView.setImageBitmap(resource); } });

Ahora puede ver una advertencia SimpleTarget is deprecated

Razón:

El punto principal de desaprobar SimpleTarget es advertirle sobre las formas en que lo tienta a romper el contrato de API de Glide. Específicamente, no hace nada para forzarlo a dejar de usar cualquier recurso que haya cargado una vez que se borre SimpleTarget, lo que puede provocar bloqueos y corrupción gráfica.

El SimpleTarget todavía se puede usar siempre y cuando se asegure de que no está usando el mapa de bits una vez que se borre el imageView.

Descargar una URL en un ImageView es muy fácil usando Glide:

Glide .with(context) .load(getIntent().getData()) .placeholder(R.drawable.ic_loading) .centerCrop() .into(imageView);

Me pregunto si también puedo descargar en un Bitmap . Me gustaría descargar en un mapa de bits sin procesar que luego puedo manipular con otras herramientas. He leído el código y no veo cómo hacerlo.


Esto es lo que funcionó para mí: https://github.com/bumptech/glide/wiki/Custom-targets#overriding-default-behavior

import com.bumptech.glide.Glide; import com.bumptech.glide.request.transition.Transition; import com.bumptech.glide.request.target.BitmapImageViewTarget; ... Glide.with(yourFragment) .load("yourUrl") .asBitmap() .into(new BitmapImageViewTarget(yourImageView) { @Override public void onResourceReady(Bitmap bitmap, Transition<? super Bitmap> anim) { super.onResourceReady(bitmap, anim); Palette.generateAsync(bitmap, new Palette.PaletteAsyncListener() { @Override public void onGenerated(Palette palette) { // Here''s your generated palette Palette.Swatch swatch = palette.getDarkVibrantSwatch(); int color = palette.getDarkVibrantColor(swatch.getTitleTextColor()); } }); } });


La respuesta de @ outlyer es correcta, pero hay algunos cambios en la nueva versión de Glide

Mi versión: 4.7.1

Código:

Glide.with(context.applicationContext) .asBitmap() .load(iconUrl) .into(object : SimpleTarget<Bitmap>(Target.SIZE_ORIGINAL, Target.SIZE_ORIGINAL) { override fun onResourceReady(resource: Bitmap, transition: com.bumptech.glide.request.transition.Transition<in Bitmap>?) { callback.onReady(createMarkerIcon(resource, iconId)) } })

Nota: este código se ejecuta en UI Thread, por lo que puede usar AsyncTask, Executor o algo más para la concurrencia (como el código de @ outlyer) Si desea obtener el tamaño original, coloque Target.SIZE_ORIGINA como mi código. No uses -1, -1


No estoy lo suficientemente familiarizado con Glide, pero parece que si conoce el tamaño objetivo, puede usar algo como esto:

Bitmap theBitmap = Glide. with(this). load("http://...."). asBitmap(). into(100, 100). // Width and height get();

Parece que puede pasar -1,-1 y obtener una imagen a tamaño completo (puramente basada en pruebas, no puedo verla documentada).

Note into(int,int) devuelve un FutureTarget<Bitmap> , por lo que debe envolverlo en un bloque try-catch que cubra ExecutionException e InterruptedException . Aquí hay un ejemplo de implementación más completo, probado y funcionando:

class SomeActivity extends Activity { private Bitmap theBitmap = null; @Override protected void onCreate(Bundle savedInstanceState) { // onCreate stuff ... final ImageView image = (ImageView) findViewById(R.id.imageView); new AsyncTask<Void, Void, Void>() { @Override protected Void doInBackground(Void... params) { Looper.prepare(); try { theBitmap = Glide. with(SomeActivity.this). load("https://www.google.es/images/srpr/logo11w.png"). asBitmap(). into(-1,-1). get(); } catch (final ExecutionException e) { Log.e(TAG, e.getMessage()); } catch (final InterruptedException e) { Log.e(TAG, e.getMessage()); } return null; } @Override protected void onPostExecute(Void dummy) { if (null != theBitmap) { // The full bitmap should be available here image.setImageBitmap(theBitmap); Log.d(TAG, "Image loaded"); }; } }.execute(); } }

Siguiendo la sugerencia de Monkeyless en el comentario a continuación (y esta parece ser también la forma oficial ), puede usar un SimpleTarget , opcionalmente junto con override(int,int) para simplificar el código considerablemente. Sin embargo, en este caso se debe proporcionar el tamaño exacto (no se acepta nada por debajo de 1):

Glide .with(getApplicationContext()) .load("https://www.google.es/images/srpr/logo11w.png") .asBitmap() .into(new SimpleTarget<Bitmap>(100,100) { @Override public void onResourceReady(Bitmap resource, GlideAnimation glideAnimation) { image.setImageBitmap(resource); // Possibly runOnUiThread() } });

según lo sugerido por @hennry si necesitabas la misma imagen, usa el new SimpleTarget<Bitmap>()


Parece que anular la clase Target o una de las implementaciones como BitmapImageViewTarget y anular el método setResource para capturar el mapa de bits podría ser el camino a seguir ...

Esto no ha sido probado. :-)

Glide.with(context) .load("http://goo.gl/h8qOq7") .asBitmap() .into(new BitmapImageViewTarget(imageView) { @Override protected void setResource(Bitmap resource) { // Do bitmap magic here super.setResource(resource); } });


Si desea asignar una imagen de mapa de bits dinámica a variables de mapa de bits

Ejemplo para kotlin

backgroundImage = Glide.with(applicationContext).asBitmap().load(PresignedUrl().getUrl(items!![position].img)).into(100, 100).get();

Las respuestas anteriores no me funcionaron

.asBitmap debe estar antes de .load("http://....")


ACTUALIZAR

Ahora necesitamos usar Custom Targets

CÓDIGO DE MUESTRA

Glide.with(mContext) .asBitmap() .load("url") .into(new CustomTarget<Bitmap>() { @Override public void onResourceReady(@NonNull Bitmap resource, @Nullable Transition<? super Bitmap> transition) { } @Override public void onLoadCleared(@Nullable Drawable placeholder) { } });

¿Cómo se usa glide para descargar una imagen en un mapa de bits?

La respuesta anterior es correcta pero está desactualizada

porque en la nueva versión de la implementation ''com.github.bumptech.glide:glide:4.8.0'' de Glide implementation ''com.github.bumptech.glide:glide:4.8.0''

Encontrará el siguiente error en el código

  • .asBitmap() no está disponible en glide:4.8.0

  • SimpleTarget<Bitmap> es obsoleto

Aquí hay solución

import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.widget.ImageView; import com.bumptech.glide.Glide; import com.bumptech.glide.load.engine.DiskCacheStrategy; import com.bumptech.glide.request.Request; import com.bumptech.glide.request.RequestOptions; import com.bumptech.glide.request.target.SizeReadyCallback; import com.bumptech.glide.request.target.Target; import com.bumptech.glide.request.transition.Transition; public class MainActivity extends AppCompatActivity { ImageView imageView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); imageView = findViewById(R.id.imageView); Glide.with(this) .load("") .apply(new RequestOptions().diskCacheStrategy(DiskCacheStrategy.NONE)) .into(new Target<Drawable>() { @Override public void onLoadStarted(@Nullable Drawable placeholder) { } @Override public void onLoadFailed(@Nullable Drawable errorDrawable) { } @Override public void onResourceReady(@NonNull Drawable resource, @Nullable Transition<? super Drawable> transition) { Bitmap bitmap = drawableToBitmap(resource); imageView.setImageBitmap(bitmap); // now you can use bitmap as per your requirement } @Override public void onLoadCleared(@Nullable Drawable placeholder) { } @Override public void getSize(@NonNull SizeReadyCallback cb) { } @Override public void removeCallback(@NonNull SizeReadyCallback cb) { } @Override public void setRequest(@Nullable Request request) { } @Nullable @Override public Request getRequest() { return null; } @Override public void onStart() { } @Override public void onStop() { } @Override public void onDestroy() { } }); } public static Bitmap drawableToBitmap(Drawable drawable) { if (drawable instanceof BitmapDrawable) { return ((BitmapDrawable) drawable).getBitmap(); } int width = drawable.getIntrinsicWidth(); width = width > 0 ? width : 1; int height = drawable.getIntrinsicHeight(); height = height > 0 ? height : 1; Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas(bitmap); drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight()); drawable.draw(canvas); return bitmap; } }