我通过.incbin用汇编代码将jpg文件加载到Stm32板上的嵌入式系统内存中,并通过std::copy将数据复制到备用缓冲区。图像显示在附加的lcd屏幕上,并用picoimage解压缩,一切正常。我希望预先应用图像效果,我使用的是CImg,它看起来很小,而且很便携。与其他人相比,我只需要将头文件放在工作目录中,并且我在下面有一个灰度代码;但是,当我试图手动更改代码时,屏幕显示为黑色。我似乎找不到合适的解决办法。他们有什么建议吗?由于某些原因,我觉得好像CImg没有意识到它是一个jpg文件,并选择加载和操作整个压缩数据。他们的工作是什么?
CImg<uint8_t> image(_buffer,_panel->getWidth(),_panel->getHeight(),1,1,true);
int width = image.width();
int height = image.height();
//int depth = image.depth();
//New grayscale images.
//CImg<unsigned char> gray1(width,height,depth,1);
//CImg<unsigned char> gray2(width,height,depth,1);
unsigned char r,g,b;
unsigned char gr1 = 0;
unsigned char gr2 = 0;
/* Convert RGB image to grayscale image */
for(int i=0;i<width;i++){
for(int j=0;j<height;j++){
//Return a pointer to a located pixel value.
r = image(i,j,0,0); // First channel RED
g = image(i,j,0,1); // Second channel GREEN
b = image(i,j,0,2); // Third channel BLUE
//PAL and NTSC
//Y = 0.299*R + 0.587*G + 0.114*B
gr1 = round(0.299*((double)r) + 0.587*((double)g) + 0.114*((double)b));
//HDTV
//Y = 0.2126*R + 0.7152*G + 0.0722*B
gr2 = round(0.2126*((double)r) + 0.7152*((double)g) + 0.0722*((double)b));
image(i,j,0,0) = gr1;
//image(i,j,0,0) = gr2;
}
}发布于 2015-05-12 16:45:36
cimg本身并不解压jpeg图像,它使用您的系统jpeg库。例如,如果您正在使用debian派生程序,则在编译之前需要使用apt-get install libjpeg-turbo8-dev。看一看cimg,并确保它能够正确地提取标题和链接。
https://stackoverflow.com/questions/29850886
复制相似问题