【问题标题】:canvas.drawBitmap bad Location and size (not placing image correctly)canvas.drawBitmap bad 位置和大小(未正确放置图像)
【发布时间】:2014-11-29 12:28:57
【问题描述】:

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

不知道你有没有办法按照代码中的说法把这些图片的位置和大小弄出来,

对不起我的英语不好

CODIGO JAVA

绘制 mPaint;

    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 中 见java图片http://i58.tinypic.com/1zywm5u.jpg

C#代码

忽略 foreach。

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

【问题讨论】:

    标签: java c# android bitmap android-canvas


    【解决方案1】:

    我找到了解决方案 使用 Matrix 设置位置和缩放 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);
    

    getResizedBitmap 方法

    public static 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;
    
    
    
        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

    【讨论】:

      猜你喜欢
      • 2013-10-19
      • 2012-09-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多