sjz::Image
   图像资源。也可以作为纹理。它管理两种格式的缓冲,一种是 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_BITSJ_IMAGE_4B_BITSJ_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_REPEATSJ_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