我正在使用提升 1.74。
所以,没有异常捕获和休息的东西,我的实际代码看起来像:
typedef std::vector<int32_t> FlatINT32TArr;
using PreviewImageT = bg::rgba8_image_t;
using PreviewViewT = bg::rgba8_view_t;
using PreviewPixelT = bg::rgba8_pixel_t;
void read_pixel_arr(FlatINT32TArr r_preview_flat_arr, const std::wstring& filepath)
{
std::ifstream byte_stream(filepath, std::ios::binary);
PreviewImageT image;
bg::read_and_convert_image(
byte_stream, image, bg::image_read_settings<bg::png_tag>());
const int image_width = (int)image.width();
const int image_height = (int)image.height();
const int preview_pixel_count = image_width * image_height;
PreviewViewT preview_view;
PreviewPixelT* buff1 = new PreviewPixelT[preview_pixel_count];
preview_view = bg::interleaved_view(
image_width, image_height, buff1,
image_width * sizeof(PreviewPixelT));
bg::copy_and_convert_pixels(
bg::flipped_up_down_view(const_view(image)), preview_view);
r_preview_flat_arr = FlatINT32TArr(preview_pixel_count);
memcpy(
&r_preview_flat_arr[0],
&preview_view[0],
sizeof(PreviewPixelT) * preview_pixel_count
);
}
它读取 * .png 图像文件并将其转换为 int32_t 数组。(然后使用该数组生成 OpenGL 纹理)。
所以,原始图像文件是:
它是从 Adobe Illustrator 导出的,带有 alpha 通道,去隔行扫描。
在这里,我遇到了一些我无法解决的问题:
- 二次抽样。
- 这是结果。如您所见,图像与楼梯一样多,为什么?如何解决?
- 交错。
- 这是结果。如您所见,从图像底部到顶部是否还有一行。暂时通过导出去隔行图像来解决它,但这不是最好的方法。如何使用 gil 解决它?
另一项测试:原始测试(带有 alpha 通道渐变):
结果: