Image Class¶
Description¶
Image存储了图像数据,用来表示内存中的图像。
Image以字节数组的方式提供了对原始数据的访问,同时也提供了访问width/height/stride等信息的接口。
(since 2.1.0) 在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++层使用。
buffer¶
(since 2.1.0) 返回图像中的数据buffer。可以使用Buffer API访问内部数据。
- C: void easyar_Image_buffer(const easyar_Image * This, easyar_Buffer * * Return)¶
- Traditional C++: void buffer(Buffer * * Return)¶
- Java: public native Buffer buffer()¶
- Objective-C: - (easyar_Buffer *)buffer¶
- Swift (since EasyAR SDK 2.1.0): public func buffer() -> Buffer¶
width¶
返回图像宽度。
- C: int easyar_Image_width(const easyar_Image * This)¶
- C++11: int width()¶
- Traditional C++: int width()¶
- Java: public native int width()¶
- Objective-C: - (int)width¶
- Swift (since EasyAR SDK 2.1.0): public func width() -> Int32¶
height¶
返回图像高度。
- C: int easyar_Image_height(const easyar_Image * This)¶
- C++11: int height()¶
- Traditional C++: int height()¶
- Java: public native int height()¶
- Objective-C: - (int)height¶
- Swift (since EasyAR SDK 2.1.0): public func height() -> Int32¶
stride¶
返回图像步长。
- C: int easyar_Image_stride(const easyar_Image * This)¶
- C++11: int stride()¶
- Traditional C++: int stride()¶
- Java: public native int stride()¶
- Objective-C: - (int)stride¶
- Swift (since EasyAR SDK 2.1.0): public func stride() -> Int32¶
format¶
返回图像格式。对于从camera获取的图像,通常你会在移动设备上拿到YUV图像,在桌面系统中拿到BGR图像。
- C: easyar_PixelFormat easyar_Image_format(const easyar_Image * This)¶
- C++11: PixelFormat format()¶
- Traditional C++: PixelFormat format()¶
- Java: public native /* PixelFormat */ int format()¶
- Objective-C: - (easyar_PixelFormat)format¶
- Swift (since EasyAR SDK 2.1.0): public func format() -> PixelFormat¶
data¶
返回图像原始内存数据(字节数组)。
- C: void * easyar_Image_data(const easyar_Image * 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¶