3

Android-V11 を使用して RDP クライアント アプリケーションを開発しています。

サーバー:画面を4分割し、各フレームの画像データをbyte[]、left、top、right、bottom、画面解像度(幅→1024/1280、高さ→768/1024)の値で送信クライアントに。

クライアント: サーバーから受信した画像を表示するためにサーフェス ビューを使用しています。タブレットの画面にぴったり収まるように、4 フレーム (サーバーの 1 画面) を表示する必要があります。

サンプルコード:

 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 のようです。したがって、ビットマップは四角形に収まりません。

ビットマップを四角形に正確に合わせる方法を教えてください。

注:画像をピンチズームする必要もあります。

ありがとう、よろしくヤミニ。

4

1 に答える 1

2

最初にビットマップの高さと幅を取得し、

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());

これで、ビットマップが長方形を塗りつぶします..

試してみてください。

于 2013-01-25T09:41:58.937 に答える