簡體   English   中英

機頂盒圖像寫入問題

[英]stb image write issue

我正在嘗試使用stb_image_write將簡單的圖像文件寫入磁盤。 我使用最簡單的測試用例:一個128 x 128像素的RGB圖像。

我在網上找到了這個例子,那個家伙似乎說它可以正常工作,而且看起來就像我已經寫了2個小時了:

void save_image(int w, int h, int channels_num)
{

    int data[w * h * channels_num];

     int index = 0;
     for (int j = h - 1; j >= 0; --j)
     {
      for (int i = 0; i < w; ++i)
      {
       float r = (float)i / (float)w;
       float g = (float)j / (float)h;
       float b = 0.2f;
       int ir = int(255.0 * r);
       int ig = int(255.0 * g);
       int ib = int(255.0 * b);

       data[index++] = ir;
       data[index++] = ig;
       data[index++] = ib;
      }
     }

    stbi_write_jpg("jpg_test_.jpg", w, h, channels_num, data, 100);
}

save_image(128, 128, 3);

結果應該是一個不錯的顏色漸變,但是我所能得到的只是一個有效的文件,其中包含一些垂直的紅色,綠色,藍色和黑色線條。 圖像的尺寸雖然可以。 我真的在這里找不到解決方案。 我在Linux Jessie上。 可能會出現“偏執”問題或類似問題嗎?

評論中回答了這個問題。 我必須將:int data []替換為:unsigned char data [];

===============這部分不准確。 請在下面查看我的解決方案部分====

int data [w * h * channels_num]; 沒關系,這不是您失敗的原因。

更改此行

stbi_write_jpg("jpg_test_.jpg", w, h, channels_num, data, 100);

stbi_write_jpg("jpg_test_.jpg", w, h, channels_num, data, w * sizeof(int));

您將得到想要的東西。 最后一個參數,我相信這是大步向前。 如果是這樣,則步幅表示兩行之間的偏移量。 根據您的問題,我假設您有128 X 128 X 32位顏色。 然后跨步將是w * sizeof(int)。

如果沒有,請告訴我。

抱歉,我急着去開會。

============這部分是解決方案部分====

是,

int data[w * h * channels_num]; 

應該

unsigned char data[w * h * channels_num];

加,

stbi_write_jpg("jpg_test_.jpg", w, h, channels_num, data, 100);

應該更改為

stbi_write_jpg("jpg_test_.jpg", w, h, channels_num, data, w * channels_num);

完整解決方案

void save_image(int w, int h, int channels_num)
{
    unsigned char data[w * h * channels_num];

    int index = 0;
    for (int j = h - 1; j >= 0; --j)
    {
        for (int i = 0; i < w; ++i)
        {
            data[index++] = (unsigned char)(255.0 * i / w);
            data[index++] = (unsigned char)(255.0 * j / h);
            data[index++] = (unsigned char)(255.0 * 0.2);
        }
    }

    stbi_write_jpg("jpg_test_.jpg", w, h, channels_num, data, w * channels_num);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM