內容目录

上一个主题

FrameStreamer Class

下一个主题

ImageTarget Class

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)
C++11: std::shared_ptr<Buffer> buffer()
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