KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
I'm trying to write a basic bicubic resize algorithm to resize a 24-bit RGB bitmap. I have a general understanding of the math involved, and I'm using this implementation from Google Code as a guide. I'm not using any external libraries here - I'm just experimenting with the algorithm itself. The bitmap is represented as a plain std::vector<unsigned char> : inline unsigned char getpixel(const std::vector<unsigned char>& in, std::size_t src_width, std::size_t src_height, unsigned x, unsigned y, int channel) { if (x < src_width && y < src_height) return in[(x * 3 * src_width) + (3 * y) + channel]; return 0; } std::vector<unsigned char> bicubicresize(const std::vector<unsigned char>& in, std::size_t src_width, std::size_t src_height, std::size_t dest_width, std::size_t dest_height) { std::vector<unsigned char> out(dest_width * dest_height * 3); const float tx = float(src_width) / dest_width; const float ty = float(src_height) / dest_height; const int channels = 3; const std::size_t row_stride = dest_width * channels; unsigned char C[5] = { 0 }; for (int i = 0; i < dest_height; ++i) { for (int j = 0; j < dest_width; ++j) { const int x = int(tx * j); const int y = int(ty * i); const float dx = tx * j - x; const float dy = ty * i - y; for (int k = 0; k < 3; ++k) { for (int jj = 0; jj < 4; ++jj) { const int z = y - 1 + jj; unsigned char a0 = getpixel(in, src_width, src_height, z, x, k); unsig
Tags (comma-separated)
Save Edits
Cancel