Растровое изображение не совсем вписывается в прямоугольник в 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());
Теперь ваше растровое изображение заполнит прямоугольник.
попробуй, всего наилучшего.