图像资源。也可以作为纹理。它管理两种格式的缓冲,一种是
RGBA(4B)数组,另一种是
sjm::vec4(4F)数组。默认只有 4B 型缓冲。可通过静态方法 readFromFile 的第三个参数,以及对象方法 make4F、delete4B、delete4F 来设置。
当图片用来通过
Background 对象设置背景,或被
TrianglePainter_P4FT2F 使用时,需要 4B。当作为
IShader 使用的纹理时,建议使用 4F。
静态方法:
static Image* readFromFile(const char* fileName, sjEnum flag);
从文件路径 fileName(相对路径)处加载图片。返回堆区 Image 指针。flag 可以是
SJ_IMAGE_FULL_BIT、
SJ_IMAGE_4B_BIT、
SJ_IMAGE_4F_BIT
位的组合(SJ_IMAGE_FULL_BIT 等于 0)。
SJ_IMAGE_4B_BIT 表示只要 4B 缓冲;SJ_IMAGE_4F_BIT 表示只要 4F 缓冲;SJ_IMAGE_FULL_BIT 表示同时保留两种缓冲。
static Image* readFromFile(const char* fileName);
只有 4B 缓冲。
构造器:
Image(int width, int height);
传入新建图片的宽、高。它将创建对应大小的 4B 缓冲。
Image(int width, int height, void* buffer);
传入新建图片的宽、高。它将创建对应大小的 4B 缓冲,并将第三个参数指向的内容复制到自己的缓冲中。
方法:
void make4F();
根据 4B 缓冲创建 4F 缓冲。
void delete4B();
删除 4B 缓冲。
void delete4F();
删除 4F 缓冲。
int getWidth();
返回图片的宽度。您也可以直接访问 Image 的 width 属性,但直接修改它会影响 Image 对象的一些方法的运行。
int getHeight();
返回图片的高度。
RGBA getColor(int x, int y);
从 4B 缓冲获取图片 (x, y) 处的颜色。
RGBA getColor_s(int x, int y);
从 4B 缓冲获取图片 (x, y) 处的颜色。若 x 或 y 超出图片范围,将返回 RGBA(0, 0, 0, 0)。
RGBA getColorByUV(float u, float v);
通过 UV 坐标获取 4B 缓冲中的颜色。
sjm::vec4 sample(float u, float v);
通过 UV 坐标获取 4F 缓冲中的颜色。
sjm::vec4 sample(const sjm::vec2 uv);
通过 UV 坐标获取 4F 缓冲中的颜色。
void setSampleFunc(sjEnum flag);
设置当 u、v 超出 0.0 到 1.0 范围时的取样方法。参数可选
SJ_REPEAT、
SJ_CLAMP_TO_EDGE。Image 对象默认为 SJ_CLAMP_TO_EDGE。
void putPx_s(int x, int y, RGBA color);
若 x 和 y 未超出图片的范围,则将 4B 缓冲的 (x, y) 处修改为 color。
void putPx(int index, RGBA color);
将 4B 缓冲的 index 处修改为 color。index 应等于 x + width * y。
相关:
Background
IShader
RGBA
sjm::vec2
sjm::vec4
SJ_IMAGE_FULL_BIT SJ_IMAGE_4B_BIT SJ_IMAGE_4F_BIT
SJ_REPEAT SJ_CLAMP_TO_EDGE