Foros del Web » Programando para Internet » Android »

[SOLUCIONADO] Error de posición y tamaño al unir bitmaps con canvas.drawBitmap

Estas en el tema de Error de posición y tamaño al unir bitmaps con canvas.drawBitmap en el foro de Android en Foros del Web. Buenas A todos y de ante mano gracias, Espero estén bien escribo pues estoy haciendo unw app, sencilla que debe unir mas de dos bitmap ...
  #1 (permalink)  
Antiguo 29/11/2014, 06:06
 
Fecha de Ingreso: noviembre-2014
Ubicación: Venezuela
Mensajes: 7
Antigüedad: 10 años
Puntos: 0
Pregunta Error de posición y tamaño al unir bitmaps con canvas.drawBitmap

Buenas A todos y de ante mano gracias, Espero estén bien escribo pues estoy haciendo unw app, sencilla que debe unir mas de dos bitmap en uno solo, el problema esta en que la posición de los bitmap y el tamaño de los secundarios esta mal, y la verdad no le encuentro la vuelta pues la lógica me dice que esta bien, de hecho es un código que tengo ya en c# y lo pase a java ,obviamente es diferente sin embargo tienen el mismo principio.

me gustaría saber si tienen la forma de hacer que la posición y el tamaño de dichas imágenes salgan tal como se les esta diciendo en el código ,

adjunto código e imágenes de como se ve y como salen con el código que ya tengo en C#


CODIGO JAVA

Paint mPaint;

Bitmap image1=BitmapUtils.decodeBase64(Lie.GeFondo().GetI magen());
Bitmap image2=BitmapUtils.decodeBase64(Utilidades.getImag enTomadabase64());
Bitmap image3=BitmapUtils.decodeBase64(Lie.GetBanner().Ge tImagen());
Bitmap result = Bitmap.createBitmap(image1.getWidth(), image1.getHeight(), Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(result);
Rect srcRect = new Rect(0, 0, image1.getWidth(), image1.getHeight());
Rect dstRect = new Rect(srcRect);
Rect srcRect1 = new Rect( Foto.GetPosicionDeItems().Getx(),Foto.GetPosicionD eItems().Gety(),Foto.GetTamano().GetWidth(), Foto.GetTamano().GeHeight());
Rect srcRect3 = new Rect( Lie.GetBanner().GetPosicionDeItems().Getx(), Lie.GetBanner().GetPosicionDeItems().Gety() ,Lie.GetBanner().GetTamano().GetWidth(), Lie.GetBanner().GetTamano().GeHeight());


Rect srcRect2 = new Rect(0,0,image2.getWidth(), image2.getHeight());
Rect srcRect4 = new Rect(0,0,image3.getWidth(), image3.getHeight());

dstRect.offset(0, 0);
canvas.drawBitmap(image1, srcRect, dstRect, null);
dstRect.offset(image1.getWidth(), 0);
srcRect1.offset(0, 0);
canvas.drawBitmap(image2,srcRect2 ,srcRect1 , null);

srcRect1.offset(image2.getWidth(), 0);
srcRect3.offset(0, 0);
canvas.drawBitmap(image3,srcRect4 ,srcRect3 , null);
srcRect3.offset(image3.getWidth(), 0);
myImage = (ImageView) findViewById(R.id.imageView);
myImage.setImageBitmap(result);

Image Generada en Java




El codigo en c# es este

Es diferente pro el for pero a la final es lo mismo


System.Drawing.Bitmap Bac = (System.Drawing.Bitmap)Lienzo.Fondo.Imagen;
System.Drawing.Graphics r = System.Drawing.Graphics.FromImage(Bac);

if (Lienzo.Fotos != null)
{
if (Lienzo.Fotos.Count > 0)
{
int i = 0;
foreach (RADMLIB.Items item in Lienzo.Fotos)
{

System.Drawing.Bitmap img = (System.Drawing.Bitmap)Lista[i];
r.DrawImage(img, item.PosicionDeItems.X, item.PosicionDeItems.Y, item.Tamano.Width, item.Tamano.Height);
i++;
}
}
}
if (Lienzo.Banner != null)
{
r.DrawImage((System.Drawing.Bitmap)Lienzo.Banner.I magen, Lienzo.Banner.PosicionDeItems.X, Lienzo.Banner.PosicionDeItems.Y, Lienzo.Banner.Tamano.Width, Lienzo.Banner.Tamano.Height);
}

return Bac;


Imagen Generado con c#
  #2 (permalink)  
Antiguo 29/11/2014, 12:32
 
Fecha de Ingreso: noviembre-2014
Ubicación: Venezuela
Mensajes: 7
Antigüedad: 10 años
Puntos: 0
(Solucion)Respuesta: Error de posición y tamaño al unir bitmaps con canvas.drawBitmap

Ya le encontré la solución, Para los interesados La diferencia es que en C# uso Rectángulos para darle posición y tamaño es decir (X,Y,Alto,Ancho) en Java Android los rectángulos trabajan con (izquierda,derecha,arriba,abajo) muy diferente y por ende salia mal la imagen , Recordé que desde Java podría crear una matriz para dale mi X y Y y antes de Generar la imagen podía cambiarle el tamaño al necesario, y listo

el código lo dejo a continuación

Bitmap image1=BitmapUtils.decodeBase64(Lie.GeFondo().GetI magen());
Bitmap image2=BitmapUtils.getResizedBitmap(BitmapUtils.de codeBase64(Utilidades.getImagenTomadabase64()),Fot o.GetTamano().GetWidth(),Foto.GetTamano().GeHeight ());
Bitmap image3=BitmapUtils.getResizedBitmap(BitmapUtils.de codeBase64(Lie.GetBanner().GetImagen()),Lie.GetBan ner().GetTamano().GetWidth(),Lie.GetBanner().GetTa mano().GeHeight());
Bitmap result = Bitmap.createBitmap(image1.getWidth(), image1.getHeight(), Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(result);//Create the canvas to your image
Rect srcRect = new Rect(0, 0, image1.getWidth(), image1.getHeight());
Rect dstRect = new Rect(srcRect);
Matrix matrix = new Matrix ();
Matrix matrix2 = new Matrix ();
matrix.postTranslate( Foto.GetPosicionDeItems().Getx(),Foto.GetPosicionD eItems().Gety());
matrix2.postTranslate( Lie.GetBanner().GetPosicionDeItems().Getx(),Lie.Ge tBanner().GetPosicionDeItems().Gety());
canvas.drawBitmap(image1, srcRect, dstRect, null);
dstRect.offset(image1.getWidth(), 0);
canvas.drawBitmap(image2,matrix , null);
canvas.drawBitmap(image3,matrix2 , null);


Etiquetas: bitmap, java
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:10.