代码之家  ›  专栏  ›  技术社区  ›  Matthieu Napoli

基于socket的C++与java的图像传输

  •  1
  • Matthieu Napoli  · 技术社区  · 15 年前

    我想把照片从 Java 应用于

    我想能够双向传输它(java & lt;-& gt;C++)。

    图像不是一个文件,这是一个 内存对象/结构 . 所以我的主要问题是如何对图像进行编码,以便它可以在java和C++中使用。

    传输是在同一台机器上进行的(没有网络,所以速度不是很关键),但是速度越快/效率越高越好。

    谢谢你

    3 回复  |  直到 15 年前
        1
  •  3
  •   Faisal Feroz    15 年前

    发送RGB字节怎么样。您可以从缓冲区得到RGB字节,然后将其作为字节数组发送到C++层。然后在C++层中使用该字节数组构造图像。

        2
  •  2
  •   Vijay Mathew Chor-ming Lung    15 年前

    Google protobuf

    // Java image class
    
    class Image {
        // ...
        byte[] getImageData() {
            return imageData_;
        }
    
        int getVersion() {
            return version_;
        }
        // ...
    }
    

    可以使用以下protobuf消息序列化图像对象:

    message ImageMsg {
        required int32 version = 1;
        required bytes imageData = 2;
    }
    

    原型BuffF编译器将从这个定义生成java和C++类。从Java将图像序列化为ImageMsg对象:

    Image img;
    // ...
    ImageMsg.Builder msg = ImageMsg.newBuilder();
    msg.setVersion(img.getVersion());
    msg.setImageData(img.getImageData());
    // The output stream could point to a file, socket, pipe or something else.
    msg.writeTo(someOutputStream);
    

    在C++侧,从流中读取对象:

    std::istream* is;
    // initialize istream
    
    ImageMsg msg;    
    msg.ParseFromIstream(istream);
    Image img(msg.getVersion(), msg.getImageData());
    

    也可以做相反的操作,即,将图像对象从C++发送到java。

        3
  •  1
  •   Steve Jessop    15 年前

    推荐文章