Buffer Class

Description

(since 2.1.0) Buffer 存储了原始字节数组,可以用来访问图像数据。

在Java API中可以从Image中获取buffer然后copy数据到Java字节数组。

在EasyAR SDK的所有版本中,你都可以访问图像数据,而且这在EasyAR SDK 2.1中变得更加简单。

在iOS中可以这样访问

#import <easyar/buffer.oc.h>
#import <easyar/image.oc.h>

easyar_Frame * frame = [streamer peek];
for (easyar_Image * i in [frame images]) {
    easyar_Buffer * b = [i buffer];
    char * bytes = calloc([b size], 1);
    memcpy(bytes, [b data], [b size]);
    //TODO: use bytes here
    free(bytes);
}

在Android里面, (since 2.1.0)

import cn.easyar.Buffer;
import cn.easyar.Image;

Frame frame = streamer.peek();
for (Image i : frame.images()) {
    Buffer b = i.buffer();
    byte[] bytes = new byte[b.size()];
    b.copyTo(bytes, 0);
    //TODO: use bytes here
}

在2.1.0之前,你只能将data传到JNI然后自己往Java中传回数据,或者也可以直接在C/C++层使用。

data

返回原始内存数据(字节数组)。

C: void * easyar_Buffer_data(const easyar_Buffer * This)
C++11: void * data()
Traditional C++: void * data()
Java: public native long data()
Objective-C: - (void *)data
Swift (since EasyAR SDK 2.1.0): public func data() -> OpaquePointer

size

原始内存数据的字节长度。

C: int easyar_Buffer_size(const easyar_Buffer * This)
C++11: int size()
Traditional C++: int size()
Java: public native int size()
Objective-C: - (int)size
Swift (since EasyAR SDK 2.1.0): public func size() -> Int32

copyTo

复制buffer数据到用户数组。

Java: public native void copyTo(byte[] data, int index)