Quiero crear una imagen de mapa de bits de la imagen en particular, pero quiero resistir la anchura y la altura de la bitmapimage. estoy usando el siguiente código ……

image2  = BitmapFactory.decodeResource(getResources(), rid);
        Log.w("DEBUG","which is null:image i " + i.getWidth() + " OR " +i.getDrawable().getIntrinsicHeight () );
        Log.w("DEBUG","which is null:image h " + h.getWidth() + " OR " +h.getHeight() );
        Log.w("DEBUG","which is null:image2 " + image2.getWidth() + " OR " +image2.getHeight() );

     Bitmap image = Bitmap.createScaledBitmap(image2, i.getWidth(), i.getHeight(), false);
        Log.w("DEBUG","which is null:image " + image.getWidth() + " OR " +image.getHeight() );
        double bmWidth = image.getWidth();
          double bmHeight = image.getHeight(); 
          if ( x < 0 || y < 0 || x > getWidth() || y > getHeight()){
               return 0; //Invalid, return 0 
              }else{
               //Convert touched x, y on View to on Bitmap
               int xBm = (int)(x * (bmWidth / getWidth()));
               int yBm = (int)(y * (bmHeight / getHeight()));
               return image.getPixel(xBm, yBm); 

pero no es la devolución de la misma salida ……..me lo está demostrando la misma anchura y la altura, pero mi salida deseada no viene. en mi salida deseada altura es de grandes ……entonces, ¿cómo superar eso. puede nay uno me sugieren

editado :

this.setDrawingCacheEnabled(true);
//this is the important code :)  
//Without it the view will have a dimension of 0,0 and the bitmap will be null          
this.measure(MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED), 
MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
this.layout(0, 0, this.getMeasuredWidth(), this.getMeasuredHeight()); 
this.buildDrawingCache(true);
Bitmap image = Bitmap.createBitmap(this.getDrawingCache());
this.setDrawingCacheEnabled(false);
//image2  = BitmapFactory.decodeResource(getResources(), rid);
Log.w("DEBUG","which is null:image i " + i.getWidth() + " OR " +i.getDrawable().getIntrinsicHeight () );
Log.w("DEBUG","which is null:image h " + h.getWidth() + " OR " +h.getHeight() );
Log.w("DEBUG","which is null:image2 " + image2.getWidth() + " OR " +image2.getHeight() );
Log.w("DEBUG","which is null:image " + image.getWidth() + " OR " +image.getHeight() );
double bmWidth = image.getWidth();
double bmHeight = image.getHeight(); 
if ( x < 0 || y < 0 || x > getWidth() || y > getHeight()){
return 0; //Invalid, return 0 
}else{
//Convert touched x, y on View to on Bitmap
int xBm = (int)(x * (bmWidth / getWidth()));
int yBm = (int)(y * (bmHeight / getHeight()));
return image.getPixel(xBm, yBm); 
}
}

ahora me lo está demostrando excepción de puntero nulo…
stacktrace

05-29 15:22:07.205: E/AndroidRuntime(889): FATAL EXCEPTION: main
05-29 15:22:07.205: E/AndroidRuntime(889): java.lang.NullPointerException
05-29 15:22:07.205: E/AndroidRuntime(889):  at android.graphics.Bitmap.createBitmap(Bitmap.java:358)
05-29 15:22:07.205: E/AndroidRuntime(889):  at com.example.nam.ImageIn.getmaskPixel(ImageIn.java:60)
05-29 15:22:07.205: E/AndroidRuntime(889):  at com.example.nam.AshActivity.getMaskColor(AshActivity.java:192)
05-29 15:22:07.205: E/AndroidRuntime(889):  at com.example.nam.FirstImage.pageinfo(FirstImage.java:102)
05-29 15:22:07.205: E/AndroidRuntime(889):  at com.example.nam.FirstImage.onTouch(FirstImage.java:65)
05-29 15:22:07.205: E/AndroidRuntime(889):  at android.view.View.dispatchTouchEvent(View.java:3762)
05-29 15:22:07.205: E/AndroidRuntime(889):  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:863)
05-29 15:22:07.205: E/AndroidRuntime(889):  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:863)
05-29 15:22:07.205: E/AndroidRuntime(889):  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:863)
05-29 15:22:07.205: E/AndroidRuntime(889):  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:863)
05-29 15:22:07.205: E/AndroidRuntime(889):  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:863)
05-29 15:22:07.205: E/AndroidRuntime(889):  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:863)
05-29 15:22:07.205: E/AndroidRuntime(889):  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:863)
05-29 15:22:07.205: E/AndroidRuntime(889):  at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1671)
05-29 15:22:07.205: E/AndroidRuntime(889):  at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1107)
05-29 15:22:07.205: E/AndroidRuntime(889):  at android.app.Activity.dispatchTouchEvent(Activity.java:2086)
05-29 15:22:07.205: E/AndroidRuntime(889):  at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1655)
05-29 15:22:07.205: E/AndroidRuntime(889):  at android.view.ViewRoot.handleMessage(ViewRoot.java:1785)
05-29 15:22:07.205: E/AndroidRuntime(889):  at android.os.Handler.dispatchMessage(Handler.java:99)
05-29 15:22:07.205: E/AndroidRuntime(889):  at android.os.Looper.loop(Looper.java:123)
05-29 15:22:07.205: E/AndroidRuntime(889):  at android.app.ActivityThread.main(ActivityThread.java:4627)
05-29 15:22:07.205: E/AndroidRuntime(889):  at java.lang.reflect.Method.invokeNative(Native Method)
05-29 15:22:07.205: E/AndroidRuntime(889):  at java.lang.reflect.Method.invoke(Method.java:521)
05-29 15:22:07.205: E/AndroidRuntime(889):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
05-29 15:22:07.205: E/AndroidRuntime(889):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
05-29 15:22:07.205: E/AndroidRuntime(889):  at dalvik.system.NativeStart.main(Native Method)
InformationsquelleAutor Ashishsingh | 2012-05-29

3 Comentarios

  1. 1

    Sólo podría utilizar el imageView la memoria caché de la imagen. Va a hacer toda la vista ya que se plantea (en escala,rodeada de un fondo, etc) a un nuevo mapa de bits.

    imageView.buildDrawingCache();
    Bitmap bmap = imageView.getDrawingCache();

    y puede ser esta:

    BitmapDrawable drawable = (BitmapDrawable) imageView.getDrawable();
    Bitmap bitmap = drawable.getBitmap();

    Más

    o formulario sdcard imagen de mapa de bits

    FileInputStream in = new FileInputStream("/sdcard/test2.png");
    BufferedInputStream buf = new BufferedInputStream(in);
    byte[] bMapArray= new byte[buf.available()];
    buf.read(bMapArray);
    Bitmap bMap = BitmapFactory.decodeByteArray(bMapArray, 0, bMapArray.length
    • puede usted explicar acerca de la sdcardimage a mapa de bits …..que pueden ser la ayuda más a entender esto porque soy principiante
    • _lovers me lo está demostrando error ….he actualizado que
  2. 0

    Si he de entender que usted desea crear una escala de mapa de bits de otro.A continuación es un fragmento de código que te permitirá cambiar el tamaño de un mapa de bits.

    Simplemente ingrese el original objeto de mapa de bits y las dimensiones del mapa de bits, y este método devolverá a usted el nuevo tamaño de mapa de bits!

    public Bitmap getResizedBitmap(Bitmap bm, int newHeight, int newWidth) {
    int width = bm.getWidth();
    int height = bm.getHeight();
    float scaleWidth = ((float) newWidth) / width;
    float scaleHeight = ((float) newHeight) / height;
    //create a matrix for the manipulation
    Matrix matrix = new Matrix();
    //resize the bit map
    matrix.postScale(scaleWidth, scaleHeight);
    //recreate the new Bitmap
    Bitmap resizedBitmap = Bitmap.createBitmap(bm, 0, 0, width, height, matrix, false);
    return resizedBitmap;
    }

    Para obtener los valores de los píxeles de punto a tocar

    Uso De Mapa De Bits.getPixel(int x, int y) en el objeto de mapa de bits. Le devolverá el valor int de donde usted necesita para tomar separadas a,r,g,b valores de desplazamiento de bits a la derecha:

    int pixelCol = bmp.getPixel(touchX,touchY);
    int a = (pixelCol >>> 24) & 0xff;
    int r = (pixelCol >>> 16) & 0xff;
    int g = (pixelCol >>> 8) & 0xff;
    int b = pixelCol & 0xff;
    • no amigo no funciona…….
    • desea cambiar el tamaño de un mapa de bits es eso lo que quieres?*
    • básicamente en esta función quiero que whnen usuario toca en ese píxel, a continuación, debe devolver el color del píxel….pero cuando voy a convertir en mapa de bits, a continuación, es ‘s la altura es mayor, pero la anchura es normal .
    • ver respuesta actualizada
    • sé que, pero la imagen de mapa de bits se convierte es que no me da el valor correcto y de imagen de mapa de bits está correctamente convertidos …….
  3. 0

    Intenta deshabilitar el auto-escala?

    Matrix matrix = new Matrix();               
    BitmapFactory.Options bfoOptions = new BitmapFactory.Options(); 
    //Set to UnAutoScale
    bfoOptions.inScaled = false;
    //Fit to your size
    matrix.setScale(widthRatio, heightRatio); 
    Bitmap tempBitmap = BitmapFactory.decodeResource(res, resID, bfoOptions);
    Bitmap outputbitmap = Bitmap.createBitmap(tempBitmap, 0, 0, tempBitmap.getWidth(), tempBitmap.getHeight(), matrix, true);
    • me lo está demostrando siguiente error java.lang.IllegalArgumentException: tamaño del mapa de bits supera el de 32bits

Dejar respuesta

Please enter your comment!
Please enter your name here