canvas.draw位图错误的位置和大小(未正确放置图像)

本文关键字:图像 错误 位图 draw 位置 canvas | 更新日期: 2023-09-27 18:32:23

大家好,事先谢谢,我希望写得很好,因为我正在做一个简单的应用程序,应该将两个以上的位图合并在一个位图中,问题是位图和大小在哪个位置错误,真相不会找到给我的逻辑的背面很好,实际上它是 Tengo Que 代码已经在 c# 和 PASE java 显然是不同的罪过,但有相同的原理.

我想知道您是否有办法将这些图像的位置和大小确定出来,就像代码中的这句话一样,

对不起,我的英语不好

科迪戈爪哇

油漆

m油漆;

    Bitmap image1=BitmapUtils.decodeBase64(Lie.GeFondo().GetImagen());
    Bitmap image2=BitmapUtils.decodeBase64(Utilidades.getImagenTomadabase64());
    Bitmap image3=BitmapUtils.decodeBase64(Lie.GetBanner().GetImagen());
    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.GetPosicionDeItems().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);

在爪哇请参阅 Java 图片 http://i58.tinypic.com/1zywm5u.jpg

C# 代码

忽略前方。

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.Imagen, Lienzo.Banner.PosicionDeItems.X, Lienzo.Banner.PosicionDeItems.Y, Lienzo.Banner.Tamano.Width, Lienzo.Banner.Tamano.Height);
        }
        return Bac;

请参阅 C# 图片 http://i61.tinypic.com/s61wlh.jpg

canvas.draw位图错误的位置和大小(未正确放置图像)

我找到了解决方案使用矩阵设置位置和比例 x,y

    Bitmap image1=BitmapUtils.decodeBase64(Lie.GeFondo().GetImagen());
    Bitmap image2=BitmapUtils.getResizedBitmap(BitmapUtils.decodeBase64(Utilidades.getImagenTomadabase64()),Foto.GetTamano().GetWidth(),Foto.GetTamano().GeHeight());
    Bitmap image3=BitmapUtils.getResizedBitmap(BitmapUtils.decodeBase64(Lie.GetBanner().GetImagen()),Lie.GetBanner().GetTamano().GetWidth(),Lie.GetBanner().GetTamano().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.GetPosicionDeItems().Gety());
    matrix2.postTranslate( Lie.GetBanner().GetPosicionDeItems().Getx(),Lie.GetBanner().GetPosicionDeItems().Gety());
    canvas.drawBitmap(image1, srcRect, dstRect, null);
    dstRect.offset(image1.getWidth(), 0);
    canvas.drawBitmap(image2,matrix , null);
    canvas.drawBitmap(image3,matrix2 , null);

getRessize位图方法

public static Bitmap getRessizeBitmap(Bitmap bm, int newHeight, int newWidth) {

    int width = bm.getWidth();
    int height = bm.getHeight();
    float scaleWidth = ((float) newWidth) / width;
    float scaleHeight = ((float) newHeight) / height;

    Matrix matrix = new Matrix();

    matrix.postScale(scaleWidth, scaleHeight);

    Bitmap resizedBitmap = Bitmap.createBitmap(bm, 0, 0, width, height, matrix, false);
    return resizedBitmap;
}

看图片

https://lh4.ggpht.com/LXW8kVc3U8qQUHnORI-3H4H-A2hjq92y_oEDsKIs-iBDkVBFTgjGP03xFReCeuyLlg=h900-rw