Crear Bitmap NullPointerException

Tengo un bloqueo en una aplicación que no puedo resolver.

Obtengo un mapa de bits del recurso así.

Bitmap bmp1 = BitmapFactory.decodeResource(getResources(), R.drawable.map_distance_tag); 

Ahora esto parece tener problemas en una pequeña minoría de dispositivos cuando se trata de crear un mapa de bits de este mapa de bits. Por ejemplo…

 Bitmap bmOverlay = Bitmap.createBitmap(bmp1.getWidth(), bmp1.getHeight(), bmp1.getConfig()); 

Obtengo una NullPointerException cuando se crea el Bitmap de Bitmap en la línea 468 de la clase Bitmap , que he tenido una mirada y su cuando se establece la escala de densidad del nuevo mapa de bits de su mapa de bits de origen.

 // The new bitmap was created from a known bitmap source so assume that 467 // they use the same density scale 468 bitmap.setDensityScale(source.getDensityScale()); 

Ahora no puedo parecer recrear el problema pero el hecho que no consigo una excepción cuando getWidth () se llama en el Bitmap original me dice que la fuente no es null.

Aquí está el rastro de la pila entera.

 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.my.app/com.my.app.recording.TrackingActivity}: java.lang.NullPointerException at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679) at android.app.ActivityThread.access$2300(ActivityThread.java:125) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:123) at android.app.ActivityThread.main(ActivityThread.java:4627) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:521) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) at dalvik.system.NativeStart.main(Native Method) Caused by: java.lang.NullPointerException at android.graphics.Bitmap.createBitmap(Bitmap.java:468) at com.my.app.maps.MapFragment.createTabOverlay(MapFragment.java:663) at com.my.app.maps.MapFragment.addMarkersForToolType(MapFragment.java:474) at com.my.app.maps.MapFragment.onActivityCreated(MapFragment.java:405) at android.support.v4.app.Fragment.performActivityCreated(Fragment.java:1468) at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:931) at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1088) at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682) at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1444) at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:551) at com.my.app.recording.TrackingActivity.onStart(TrackingActivity.java:272) at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1129) at android.app.Activity.performStart(Activity.java:3781) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2636) ... 11 more 

Mi idea

¿Podría ser algo que ver con mí, no incluyendo diferentes mapas de bits para diferentes densidades de pantalla? Todos los Bitmaps suministrados son para pantallas mdpi.

Noto que también hay un BackStackRecord. ¿Podría ocurrir esto cuando el usuario presiona hacia atrás?

Gracias por adelantado

La fuente a la que Bitmap.java:468 en Bitmap.java:468 es de Android 1.5, y probablemente no es tu problema.

v1.5 Bitmap.java:468

 bitmap.setDensityScale(source.getDensityScale()); 

v1.6-v2.2 Bitmap.java:468

 Bitmap bm = nativeCreate(null, 0, width, width, height, config.nativeInt, true); 

Línea 468 en cualquier cosa más reciente que 2.2 es parte de un bloque javadoc o una función no relacionada, así que supongo que estás viendo la versión 1.6-2.2, no la que estás intentando solucionar.

Lo único en esa línea veo que realmente podría terminar null es config . En su código, utilice getConfig() para capturar el objeto de mapa de bits actual. Los documentos para ello muestran:

public final Bitmap.Config getConfig ()

Añadido en API nivel 1

Si la configuración interna del mapa de bits está en uno de los formatos públicos, devuelva esa configuración, de lo contrario devolverá null.

Por lo tanto, es probablemente no encontrar un formato "público", y devolver null, que pasa a createBitmap() , y sopla su código.

Puede utilizar una configuración estática todo el tiempo, como Bitmap.Config.ARGB_8888 , o hacer el getConfig() en una línea anterior y null-comprobarlo. Si es nulo, entonces vaya a una configuración de fallback como se acaba de mencionar.

yourSelectedImageBitmap = BitmapFactory.decodeFile (filePath, opciones);

  if (yourSelectedImageBitmap != null) { // ----------resize for set in imageView------------ int width = yourSelectedImageBitmap.getWidth(); int height = yourSelectedImageBitmap.getHeight(); int newWidth = 140; int newHeight = 140; // calculate the scale - in this case = 0.4f float scaleWidth = ((float) newWidth) / width; float scaleHeight = ((float) newHeight) / height; Matrix matrix = new Matrix(); // resize the bit map matrix.postScale(scaleWidth, scaleHeight); if (exifOrientation.equals("6")) { matrix.postRotate(90); } Bitmap resizedBitmap = Bitmap.createBitmap(yourSelectedImageBitmap, 0, 0, width, height, matrix, true); image.setImageBitmap(resizedBitmap); // Toast.makeText(getApplicationContext(), // "in the select image loop", 2000).show(); // ----------resize for upload------------ int width1 = yourSelectedImageBitmap.getWidth(); int height1 = yourSelectedImageBitmap.getHeight(); 

Usted puede dar un intento por esta manera. Después de conseguir la imagen de la fuente de archivo o de la cámara.

y luego haciendo esto.

 Matrix matrix1 = new Matrix(); // resize the bit map matrix.postScale(width1, height1); if (exifOrientation.equals("6")) { matrix1.postRotate(90); } Bitmap resizedBitmap1 = Bitmap.createBitmap( yourSelectedImageBitmap, 0, 0, width1, height1, matrix1, true); ByteArrayOutputStream baos = new ByteArrayOutputStream(); resizedBitmap1.compress(Bitmap.CompressFormat.JPEG, 100, baos); byte[] image_bytes = baos.toByteArray(); try { baos.flush(); baos.close(); } catch (IOException e) { e.printStackTrace(); Log.e("~~~~~~~~IOException~~~~~~~~~eeeeee~~~~", "~~~~~~IOException~~~~~~~~~eeeee~~~~" + e.getMessage()); } image_string = Base64.encodeToString(image_bytes, 0); 

Espero que esto te ayudará

Usted puede hacer esto:

 Bitmap bitmap = BitmapFactory.decodeResource(getResources(),R.drawable.icon); Bitmap bmpCompressed = Bitmap.createScaledBitmap(bitmap, 600, 400, true); ByteArrayOutputStream bos = new ByteArrayOutputStream(); // CompressFormat set up to JPG, you can change to PNG bmpCompressed.compress(CompressFormat.JPEG, 90, bos); imageByteArray = bos.toByteArray(); 

Creo que esto funcionará

  BitmapFactory.Options opt = new BitmapFactory.Options(); opt.inMutable = true; //you have to set bitmap to mutable bmp1 = BitmapFactory.decodeResource(getResources(), R.drawable.map_distance_tag,opt); Bitmap bmOverlay = Bitmap.createBitmap(bmp1.getWidth(), bmp1.getHeight(), Bitmap.Config.ARGB_8888); //if you want to copy the bmp1 to bmOverlay bmOverlay=Bitmap.createScaledBitmap(bmp1, bmp1.getWidth, bmp1.getHeight, false); OR //if did not work replace bmOverlay to this: bmOverlay = Bitmap.createBitmap(bmp1); 

Tuve el mismo problema y me estaba volviendo loco. Terminé solucionando el problema cambiando

 Bitmap bmOverlay = Bitmap.createBitmap(bmp1.getWidth(), bmp1.getHeight(), bmp1.getConfig()); 

a

 Bitmap bmOverlay = Bitmap.createBitmap(bmp1.getWidth(), bmp1.getHeight(), Bitmap.Config.ARGB_8888); 
  • Imagen de umbral Blanco-Blanco en tiempo real de Android
  • Cómo obtener un mapa de bits de VectorDrawable
  • Imagen sin recortar
  • No se puede comprimir un mapa de bits reciclado
  • ¿Cómo posiciono mi mapa de bits en el lienzo usando una matriz?
  • Android - Enmascarar un mapa de bits con otro mapa de bits
  • Transiciones de diapositivas y de Android
  • Android: error de "intentar utilizar un mapa de bits reciclado" con Bitmaps temporales
  • Android: libera recursos de memoria de mapa de bits de forma programática
  • Preservar la calidad de imagen
  • Guardar un edittext en un mapa de bits
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.