tutorial - procesamiento de imagenes en android studio
Gire un mapa de bits usando el script de procesamiento android (2)
Prueba este código ...
private Bitmap RotateImage(Bitmap _bitmap, int angle) {
Matrix matrix = new Matrix();
matrix.postRotate(angle);
_bitmap = Bitmap.createBitmap(_bitmap, 0, 0, _bitmap.getWidth(), _bitmap.getHeight(), matrix, true);
return _bitmap;
}
Use este código cuando seleccione la imagen de la galería.
Me gusta esto..
File _file = new File(file_name);
BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = 1;
Bitmap bitmap = BitmapFactory.decodeFile(file_name, options);
try {
ExifInterface exif = new ExifInterface(file_name);
int orientation = exif.getAttributeInt(ExifInterface.TAG_ORIENTATION, 1);
if (orientation == ExifInterface.ORIENTATION_ROTATE_90) {
bitmap = RotateImage(bitmap, 90);
} else if (orientation ==ExifInterface.ORIENTATION_ROTATE_270) {
bitmap = RotateImage(bitmap, 270);
}
} catch (Exception e) {
e.printStackTrace();
}
image_holder.setImageBitmap(bitmap);
Cuando uso el siguiente código, termina con la excepción de memoria insuficiente. Después de investigar, la secuencia de comandos de Render parece un buen candidato. ¿Dónde puedo encontrar código de muestra para una operación similar y cómo puedo integrarlo a mi proyecto?
public Bitmap rotateBitmap(Bitmap image, int angle) {
if (image != null) {
Matrix matrix = new Matrix();
matrix.postRotate(angle, (image.getWidth()) / 2,
(image.getHeight()) / 2);
return Bitmap.createBitmap(image, 0, 0, image.getWidth(),
image.getHeight(), matrix, true);
}
return null;
}
Básicamente rotar mapa de bits es una tarea de rotación de matriz 2D sin usar memoria adicional. Y esta es la implementación correcta con RenderScript: Android: rota la imagen sin cargarla en la memoria .
Pero esto no es necesario si todo lo que desea es solo mostrar el mapa de bits rotado. Simplemente puede extender ImageView
y rotar el Canvas
mientras dibuja sobre él:
canvas.save();
canvas.rotate(angle, X + (imageW / 2), Y + (imageH / 2));
canvas.drawBitmap(imageBmp, X, Y, null);
canvas.restore();
¿Qué pasa con ScriptIntrinsic? Dado que solo se trata de kernels integrados de RenderScript para operaciones comunes, no se puede hacer nada por encima de las funciones ya implementadas: ScriptIntrinsic3DLUT, ScriptIntrinsicBLAS, ScriptIntrinsicBlend, ScriptIntrinsicBlur, ScriptIntrinsicColorMatrix, ScriptIntrinsicConvolve3x3, ScriptIntrinsicConvolve5x5, ScriptIntrinsicHistogram, ScriptIntrinsicLUT, ScriptIntrinsicResize, ScriptIntrinsicYuvToRGB
. No incluyen funcionalidad para rotar bitmap en este momento, por lo que debe crear su propia secuencia de comandos ScriptC.