代码之家  ›  专栏  ›  技术社区  ›  Xzhsh

boost::gil交错视图

  •  3
  • Xzhsh  · 技术社区  · 15 年前

    我想弄清楚boost图像库有点困难。

    我找不到任何关于如何使用boost::gil库中包含的interleaved_view函数的确切文档。更具体地说,我不知道原始数据应该以什么二进制格式存储。

    我能找到的唯一提及是在gil教程中:

    // Calling with 8-bit RGB data into 16-bit BGR
    void XGradientRGB8_BGR16(const unsigned char* src_pixels, ptrdiff_t src_row_bytes, int w, int h,
                                     signed short* dst_pixels, ptrdiff_t dst_row_bytes) {
        rgb8c_view_t  src = interleaved_view(w,h,(const rgb8_pixel_t*)src_pixels,src_row_bytes);
        rgb16s_view_t dst = interleaved_view(w,h,(    rgb16s_pixel_t*)dst_pixels,dst_row_bytes);
        x_gradient(src,dst);
    }
    

    另外,函数原型说

    template<typename Iterator>
    type_from_x_iterator< Iterator>::view_t     
    boost::gil::interleaved_view (std::size_t width, std::size_t height, Iterator pixels, std::ptrdiff_t rowsize_in_bytes)
    //Constructing image views from raw interleaved pixel data. 
    

    我的问题是,gil在二进制格式中期望的格式是什么,rowsize_in_bytes应该是什么?

    我以前唯一见过的交错图像是在使用OpenGL时,OpenGL只是相邻存储的每个像素的RGB信息。我以为rowsize_in_bytes会是一行像素的字节大小,所以我试着用这个写一个PNG:

    void makeImage(const string fileName, const unsigned char * src, const int w, const int h) {
        rgb8c_view_t outImage = interleaved_view(w,h, (const rgb8_pixel_t*) src, w*3*sizeof(unsigned char));
        boost::gil::png_write_view(fileName,outImage);
    }
    

    (char)R, (char)G, (char)B, (char)R, (char)G, (char)B, (char)R, (char)G, (char)B ...
    

    这张照片只是一个黑底白盒子。然而,我得到的结果是。。。奇怪的

    Results

    编辑:对不起,伙计们,我刚刚意识到我的愚蠢错误。我现在开始工作了。。。:(问题不在于图像的格式,而在于它是row major,而不是column major

    1 回复  |  直到 15 年前
        1
  •  7
  •   Xzhsh    15 年前

    抱歉,伙计们,我刚一发帖就意识到我和matlab合作太久了。。。我用列主格式写了数组。。。呃,我觉得自己很蠢