[英]Can't save image to file properly with cimg library
這是我的全部代碼:
#include "CImg.h"
#include <iostream>
using namespace cimg_library;
int main() {
CImg<float> image(100,100,1,3,0);
const float color[] = {1.0,1.0,0.0};
image.draw_point(50,50,color);
image.save("file.bmp");
CImgDisplay local(image, "Hah");
while (true) {
local.wait();
}
}
這成功地顯示了我在窗口中所期望的內容,即一個白色像素為50,50的完全黑色正方形。 但是,file.bmp只是一個黑色正方形,沒有那個像素(並且保存了一個cimg圖像,該圖像已經通過在較大的程序中重復調用draw_point而修改,該程序執行一些有用的操作也會失敗)。 這里發生了什么?
問題是您在啟用規范化的情況下創建CImgDisplay
。 因此, {1,1,0}
像素標准化為{255,255,0}
並在屏幕上顯示。
CImg.save
不執行規范化,因此像素以非常暗的像素保存到磁盤。
您可以通過更改白色像素顏色來解決問題:
const float color[] = {255.,255.,255.};
並且,可選地,通過禁用標准化:
CImgDisplay local(image, "Hah", 0);
或者,您可以在保存或顯示原始圖像之前將其標准化:
image.draw_point(50,50,color);
image.normalize(0, 255);
image.save("file.bmp");
參考文獻:
我不熟悉這個庫,但是這種行為會暗示CImgDisplay
在渲染時會以不同的方式解釋圖像。
我希望將白色的顏色定義為const unsigned char color[] = {255,255,255};
表示位圖的RGB值。
我會檢查CImg
的文檔作為第一步。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.