Растровое изображение не совсем вписывается в прямоугольник в Android

Я разрабатываю клиентское приложение RDP с использованием Android-V11.

Сервер: экран разделен на 4 части и отправляет данные изображения в байтах [], слева, сверху, справа, снизу, значения разрешения экрана (ширина -> 1024/1280, высота -? 768/ 1024) для каждого кадра клиенту.

Клиент: Я использую вид поверхности для отображения изображений, полученных с сервера. Мне нужно отобразить 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. Таким образом, растровое изображение не помещается в прямоугольник.

Не могли бы вы рассказать, как масштабировать растровое изображение, чтобы оно точно вписывалось в прямоугольник?

Примечание: мне также нужно Pinch Zoom изображение.

Спасибо и привет Yamini.

1 ответ

Решение

Сначала получите высоту и ширину растрового изображения,

final int height= bitmap.getHeight() ;
final int width= bitmap.getWidth();
float h= (float) height;
float w= (float) width;

Теперь позвольте позиции вашего прямоугольника ( newLeft, newTop) и height, width это newHeight и newWidth соответственно

Теперь установите положение и коэффициент масштабирования для объекта матрицы

Matrix mat=new Matrix();
mat.setTranslate( newLeft, newTop );
mat.setScale(newWidth/w ,newHeight/h);

Теперь нарисуйте свое растровое изображение с матрицей

canvas.drawBitmap(bitmap, mat, new paint());

Теперь ваше растровое изображение заполнит прямоугольник.

попробуй, всего наилучшего.

Другие вопросы по тегам