我一直在尝试为内存位图编写双三次调整大小算法。我熟悉双三次插值的工作原理,并且我使用维基百科文章和现有实现作为编写我自己的版本的指南。
下面是我的简单实现。这里,bmap是vector包含位图数据的get_subpixel函数,它是将位图视为由X x Y x Channel像素组成的 3D 数组,并返回指定坐标处的单个子像素。
std::vector<unsigned char> bicubic_resize(
std::vector<unsigned char>& bmap, std::size_t bmap_width, std::size_t bmap_height,
std::size_t channels, std::size_t dest_width, std::size_t dest_height)
{
std::vector<unsigned char> out(dest_width * dest_height * 3);
const double tx = double(bmap_width) / dest_width;
const double ty = double(bmap_height) / dest_height;
const std::size_t row_stride = dest_width * channels;
unsigned char C[5] = { 0 };
for (unsigned i = 0; i < dest_height; …Run Code Online (Sandbox Code Playgroud)