在android中,位图不完全适合矩形

在android中,位图不完全适合矩形,android,bitmap,android-canvas,surfaceview,dirtyrectangle,Android,Bitmap,Android Canvas,Surfaceview,Dirtyrectangle,我正在使用android-V11开发RDP客户端应用程序 服务器:屏幕分为4个部分,并将每个帧的图像数据以字节[]、左、上、右、下、屏幕分辨率(宽度-->1024/1280,高度--?768/1024)值的形式发送给客户端 客户端:我正在使用surface view显示从服务器接收的图像。我需要显示4帧(服务器的一个屏幕),以完全适合平板电脑屏幕 示例代码: class mySurfaceView extends SurfaceView implements SurfaceHolder.Cal

我正在使用android-V11开发RDP客户端应用程序

服务器:屏幕分为4个部分,并将每个帧的图像数据以字节[]、左、上、右、下、屏幕分辨率(宽度-->1024/1280,高度--?768/1024)值的形式发送给客户端

客户端:我正在使用surface view显示从服务器接收的图像。我需要显示4帧(服务器的一个屏幕),以完全适合平板电脑屏幕

示例代码:

 class mySurfaceView extends SurfaceView implements SurfaceHolder.Callback
    {



       class TutorialThread extends Thread 
       {
         @Override
         public void run() 
         {
           Canvas c = null;
          // Socket commnuication
           ......
         Bitmap bmp;
          while(true){
           c=null;
           //logic to get the details from server
          .....
         bmp = BitmapFactory.decodeByteArray(imageBytes, 0,imageBytes.length);

        //Logic to calculate the Top Left, right bottom corners to divide the tablet screen into   4parts for 4 frames receiving from server
          .....

    //Frame rectangle for each frame

        Rect rect = new Rect(newLeft, newTop,newWidth,newHeight);

    //display image

       try{

        c  = _surfaceHolder.lockCanvas(rect);

        if(c!=null){
            synchronized (_surfaceHolder) 
            {
                       c.drawBitmap(scaledBitmap, newLeft,newTop, paint);
                    }
              }
          }
          finally{
        if(c!=null){                                     _surfaceHolder.unlockCanvasAndPost(c);
               }
        }
        //End of while
    }
    //End of run()
    }
    //End Tutorial Thread
    }
    //End of surfaceView
    }
我们无法将位图精确地放入矩形中。框架显示在平板电脑中,它们之间有间隙

调试代码后,看起来检索到的位图(bmp)宽度是514,矩形(rect)宽度是640。因此,位图不适合矩形

请告诉我如何缩放位图,使其完全适合矩形

注意:我还需要收缩缩放图像

谢谢和问候
Yamini.

首先获取位图的高度和宽度

final int height= bitmap.getHeight() ;
final int width= bitmap.getWidth();
float h= (float) height;
float w= (float) width;
现在,让矩形的位置为(newLeft,newTop) 高度、宽度分别为newHeightnewWidth

现在将位置和比例因子设置为矩阵对象

Matrix mat=new Matrix();
mat.setTranslate( newLeft, newTop );
mat.setScale(newWidth/w ,newHeight/h);
现在用矩阵绘制位图

canvas.drawBitmap(bitmap, mat, new paint());
现在,位图将填充矩形


试试看,祝你一切顺利

您必须拉伸位图或获得更大的位图,然后根据窗口大小进行缩放。这比你想象的要复杂一点。Bcoz android有不同的屏幕尺寸。你必须小心使用它。谢谢你,你完全正确,如何在不使用位图的情况下缩放位图。createScaledBitmap(bmp,newWidth,newHeight,false);这是不可能的,亚米尼。。就是这样。但是你为什么不想用它呢??!!然后面对收缩缩放的问题,在收缩缩放之后,我在位图处得到“内存不足异常”。createScaledBitmap(bmp,newWidth,newHeight,false);。对这在位图中很常见。您必须尝试并学习如何使用位图回收。这很复杂。我已经经历过了。但是没有其他方法。谢谢你,你的答案非常适合矩形中的位图,修改如下c.translate(newLeft,newTop);c、 drawBitmap(bmp、矩阵、绘制);。但是夹点缩放功能存在问题(脏零件的夹点缩放效果并不相同)。