android - 延迟显示图像在android中使用位图

标签 android image bitmap udpclient android-drawable

我从我的设备接收到连续的 UDP 数据(RAW 图像)。解码并使用位图显示在

我的 Android 手机,所以它看起来像视频。问题是框​​架不显示

不断。框架变化约。每 2~3 秒但我想在 1/30 中逐帧显示。

下面是我的部分代码

  public class ArDroneMain extends Activity {
  Bitmap  image = null;
  public ImageView myImageView;
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    animationDrawable = new AnimationDrawable(); 
    myImageView = (ImageView)findViewById(R.id.imageView);
    thread.start();   
  }
}

 Thread thread=new Thread  (new Runnable() {
        Message message;
    String obj="run";      
    @Override
    public void run() {   

    while(true){     
        try { 
            Log.e("enter_video_thread","enter_video_thread");
            receiveVideoRawData();
            Log.e("///receiveVideoRawData ","receiveVideoRawData");
            message = handler.obtainMessage(1,obj);
                    handler.sendMessage(message);
        } catch (IOException e) {
            e.printStackTrace();
        }   
    }
   }
  public Handler handler = new Handler(){   


    @SuppressLint("NewApi")
    @Override
    public void handleMessage(Message msg) {
          super.handleMessage(msg);         
            String MsgString = (String)msg.obj;
            if (MsgString.equals("run"))
            {                                                                                
                          Drawable ardrone_Frame_Drawable =newBitmapDrawable(getResources(),image);
                         animationDrawable.addFrame(ardrone_Frame_Drawable,100);
                         myImageView.setBackground(animationDrawable);                       



            }


    }
};


  public void sendTriggerCommand() throws IOException{
        byte [] ip_bytes = new byte[] {(byte)192,(byte)168,(byte)1,(byte)1};//Drone address  
        byte[] buf_snd = {0x01, 0x00, 0x00, 0x00};//trigger buffer
        inet_addr = InetAddress.getByAddress(ip_bytes );
        DatagramPacket packet_snd = new DatagramPacket(buf_snd, buf_snd.length, i   net_addr, ardrone_video_port);       
        socket_video.send(packet_snd);

}

   public void receiveVideoRawData() throws IOException{
    Log.e("enter_receiveVideoRawData()","enter_receiveVideoRawData()");
    socket_video = new DatagramSocket();
    byte[] buf_rcv = new byte[153600];
    DatagramPacket rawData = new DatagramPacket(buf_rcv, buf_rcv.length);
        sendTriggerCommand();
        Log.e("sendTriggerCommand();","sendTriggerCommand();");
        socket_video.receive(rawData);
        Log.e("socket_video.receive(rawData);","socket_video.receive(rawData);");
        ReadRawFileImage readMyRawData=new ReadRawFileImage();

        image = readMyRawData.readUINT_RGBImage(buf_rcv);

最佳答案

我真的怀疑你能不能这么快地接收数据,尤其是原始图像。

你可以做些什么来改进你的程序:

  • 发送和接收压缩数据
  • 去掉while true循环,它永远不会动手。您应该使用 bool 标志来控制您的线程。
  • 使用AsyncTask接收数据,在后台解码,然后在ui线程显示
  • 使用带线程同步的 2 线程:一个从网络读取数据,第二个使用该数据并显示它。这将是流水线化这 2 个任务的更好的架构。

关于android - 延迟显示图像在android中使用位图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15718428/

相关文章:

c++ - 如何使用 HOG 描述符检测图像中的对象?

c - 用 C 语言编写位图

android - 计算位图平铺高度,以便不裁剪最后一项

java - 将 LibGDX 像素图转换为 Android 位图

android - 在操作栏下方创建一个 textView

.net - 在 .NET 程序中将图像加载/创建到 SharpDX 中

android - 谷歌地图 Android API keystore

image - 从 Node.js 应用程序传递图像的最佳方式(使用 Express)

android - Fullpage.js 在 Android 4.2.1 上不稳定滚动

android - Android 支持哪些字体文件类型?