Bitmap crop en Android

Se ha hablado mucho, pero mucho de como hacer crop (recortar) una imagen en Android. Si uno busca en Google, probablemente lo que encuentre es muchos posts y discusiones sobre el uso de una actividad de recorte que “normalmente” traen los devices. Se debe destacar que a pesar de que dicha Actividad se encuentra en el mismísio código fuente de Android, al ser una Actividad interna, no nos asegura de que se encuentre disponible en cualquier dispositivo y más aún, Google y sus ingenieros no recomiendan utilizarla. En todo caso, si usted lo que desea hacer es recortar una imagen a nivel de código, tal vez este script le pueda servir:

    public static Bitmap cropBitmap(Bitmap original, int height, int width) {
        Bitmap croppedImage = Bitmap.createBitmap(width, height, Bitmap.Config.RGB_565);
        Canvas canvas = new Canvas(croppedImage);

        Rect srcRect = new Rect(0, 0, original.getWidth(), original.getHeight());
        Rect dstRect = new Rect(0, 0, width, height);

        int dx = (srcRect.width() - dstRect.width()) / 2;
        int dy = (srcRect.height() - dstRect.height()) / 2;

        // If the srcRect is too big, use the center part of it.
        srcRect.inset(Math.max(0, dx), Math.max(0, dy));

        // If the dstRect is too big, use the center part of it.
        dstRect.inset(Math.max(0, -dx), Math.max(0, -dy));

        // Draw the cropped bitmap in the center
        canvas.drawBitmap(original, srcRect, dstRect, null);

        original.recycle();

        return croppedImage;
    }

Éste código es tomado del source del proyecto Android y modificado para poder ejecutarse como una función. El código origjnal se puede encontrar aqui.

Instalando CM 6.1.3 V4.3 Wolfbreak

Instalando CM 6.1.3 V4.3 Wolfbreak Android 2.2

Por fin me decidí a instalarle un custom ROM a mi Sony Ericsson Xperia x10a cuando me di cuenta de que ya habían ROMs “estables” de Gingerbread (Android 2.3). (ACLARACION no me habia fijado en que la versión e es de hecho FroYo, Android 2.2).La siguiente información no pretende ser un tutorial de como instalarlo, es más bien como una bitácora personal por si en algún momento me toca hacerlo de nuevo, pero si a alguien más le sirve, ¡enhorabuena! (osea que ocupa ciertos conocimientos para ejecutar comandos de linux, utilizar las herramientas del SDK de Android o simplemente jugarsela)

Los Pasos

Lo primero que tuve que hacer fue rootear (obtener privilegios de super usuario) el teléfono ya que debido al último update el root anterior se perdió.

Anteriormente había utilizado el app llamado z4root, pero aún actualizandolo a la version 1.3 no conseguí rootearlo.

Entonces me puse a buscar otras opciones y por ahí me encontré el SuperOneClick. Esto es requerido para poder instalar un custom ROM.

Para poder instalar un ROM en el Sony Ericsson Xperia X10 es necesario utilizar un tool para “Flasharlo”, esto se hace iniciando el teléfono en modo de “recuperación” y ejecutar un programa en ese estado. Para ello, existe el xrecovery.

Para instalar el xrecovery, se puede hacer de dos formas:

  1. La primera es bajando el el app: xRecovery 0.3 Release
  2. La segunda manera es instalandolo manualmente. Adivinen cual me toco? pues si la manual. Esto se debe aque ocupa que el telefono en modo superusuario tenga ciertos ejecutables como el comando de copiar “cp”. Extrañamente, el instalador de estos ejecutables vienen con el xRecovery en una aplicación llamada BusyBox.

Por lo tanto me tocó primero instalar BusyBox. Que segun tengo entendido se puede bajar un app del Android Market. Yo ya lo tenia, por que viene con el release de xRecovery. Pero aqui les dejo el QR Code para bajar el app: BusyBox @ Andriod Market

Para instalarlo manualmente (como yo lo hice) ocupan tener instalado el SDK de Android, aunque si tienen el FlashTool, ahi también biene el adb. Y se realiza los siguientes pasos (tomados de aqui):

adb push busybox /data/local/busybox
adb shell
su
cd /data/local
chmod 755 busybox
./busybox mount -o remount,rw -t yaffs2 /dev/block/mtdblock4 /system
/data/local/busybox cp /data/local/busybox /system/bin
cd /system/xbin
busybox --install .
mount -o ro,remount -t yaffs2 /dev/block/mtdblock4 /system
sync
reboot

Ya teniendo el BusyBox, se puede instalar el xRecovery. No intenté instalarlo usando el app, y me fui a la “segura” siguiendo la instalación manual:

  1. Bajar el apk, y renombrarlo xrecovery.zip
  2. Abrirlo o desempacarlo y buscar ./res/raw folder inside. Ahi debería haber 3 archivos: chargemon, busybox(que ya esta instalado así que no se ocupa), xrecovery.tar. Los archivos los copie en el SD Card.
  3. Copiar los archivos en /system/bin.

Aqui es importante hacer remount de /system con escritura/lectura. Esto se hace:

mount -o remount,rw -t yaffs2 /dev/block/mtdblock4 /system
cp /sdcard/chargemon /system/bin
cp /sdcard/xrecovery.tar /system/bin
mount -o ro,remount -t yaffs2 /dev/block/mtdblock4 /system

Ya aqui tenemos:

  • Teléfono rooteado
  • Con BusyBox
  • Con xRecovery 0.3

Ahora nada más sigue flashar el teléfono siguiendo los pasos de este post de xda-developers. (Básicamente es bajar los zips, iniciar el teléfono en modo recovery, hacer backup (opcional), factory reset, format partition, wipe cache, wipe dalvik cache y luego ir en orden flashando con custom zips).

Recursos: