首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >嵌入式硬件中的Cimg

嵌入式硬件中的Cimg
EN

Stack Overflow用户
提问于 2015-04-24 23:01:09
回答 1查看 98关注 0票数 0

我通过.incbin用汇编代码将jpg文件加载到Stm32板上的嵌入式系统内存中,并通过std::copy将数据复制到备用缓冲区。图像显示在附加的lcd屏幕上,并用picoimage解压缩,一切正常。我希望预先应用图像效果,我使用的是CImg,它看起来很小,而且很便携。与其他人相比,我只需要将头文件放在工作目录中,并且我在下面有一个灰度代码;但是,当我试图手动更改代码时,屏幕显示为黑色。我似乎找不到合适的解决办法。他们有什么建议吗?由于某些原因,我觉得好像CImg没有意识到它是一个jpg文件,并选择加载和操作整个压缩数据。他们的工作是什么?

代码语言:javascript
复制
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;

            }
        }
EN

回答 1

Stack Overflow用户

发布于 2015-05-12 16:45:36

cimg本身并不解压jpeg图像,它使用您的系统jpeg库。例如,如果您正在使用debian派生程序,则在编译之前需要使用apt-get install libjpeg-turbo8-dev。看一看cimg,并确保它能够正确地提取标题和链接。

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

https://stackoverflow.com/questions/29850886

复制
相关文章

相似问题

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