首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >CImg库在旋转时创建扭曲的图像

CImg库在旋转时创建扭曲的图像
EN

Stack Overflow用户
提问于 2014-01-18 10:06:29
回答 1查看 1.4K关注 0票数 2

我想使用CImg库(http://cimg.sourceforge.net/)旋转具有任意角度的图像(该图像由Qt读取,不应该执行旋转):

代码语言:javascript
运行
复制
QImage img("sample_with_alpha.png");
img = img.convertToFormat(QImage::Format_ARGB32);

float angle = 45;

cimg_library::CImg<uint8_t> src(img.bits(), img.width(), img.height(), 1, 4);
cimg_library::CImg<uint8_t> out = src.get_rotate(angle);

// Further processing:
// Data: out.data(), out.width(), out.height(), Stride: out.width() * 4

当角度设置为0时,"out.data()“中的最终数据就可以了。但对于其他角度,输出数据是扭曲的。我假设CImg库在旋转过程中会改变输出格式和/或步幅?

致以敬意,

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-01-18 10:32:11

CImg不以交错模式存储图像的像素缓冲区,如RGBARGBARGBA.但是使用通道结构RRRRRRRR.....GGGGGGGGG.......BBBBBBBBB.....AAAAAAAAA.我假设您的img.bits()指针指向具有交错通道的像素,因此如果要将其传递给CImg,则需要在应用任何CImg方法之前对缓冲区结构进行置换。试试这个:

代码语言:javascript
运行
复制
cimg_library::CImg<uint8_t> src(img.bits(), 4,img.width(), img.height(), 1);
src.permute_axes("yzcx");
cimg_library::CImg<uint8_t> out = src.get_rotate(angle);
// Here, the out image should be OK, try displaying it with out.display();
// But you still need to go back to an interleaved image pointer if you want to
// get it back in Qt.
out.permute_axes("cxyz");   // Do the inverse permutation.
const uint8_t *p_out = out.data();  // Interleaved result.

我想这应该会像预期的那样起作用。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21202635

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档