2012-04-23 22 views
8

Dưới đây là toàn bộ mã của tôi:Không thể lưu ảnh vào file đúng với cimg thư viện

#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(); 
    } 

} 

này sẽ hiển thị thành công những gì tôi mong đợi trong một cửa sổ, cụ thể là, một hình vuông hoàn toàn đen với một điểm ảnh màu trắng ở mức 50,50. Tuy nhiên, file.bmp chỉ đơn giản là một hình vuông màu đen, mà không có pixel (và lưu một ảnh cimg đã được sửa đổi với các cuộc gọi lặp đi lặp lại để draw_point trong một chương trình lớn hơn thực hiện điều gì đó hữu ích cũng không thành công). Những gì đang xảy ra ở đây?

+2

+1 cho một chương trình mẫu ngắn, hoàn chỉnh. Xem http://sscce.org/. –

Trả lời

4

Vấn đề là bạn tạo CImgDisplay khi bật tính năng chuẩn hóa. Do đó, pixel của bạn là {1,1,0} được chuẩn hóa thành {255,255,0} và hiển thị trên màn hình của bạn.

CImg.save không hoạt động bình thường, do đó pixel được lưu vào đĩa dưới dạng pixel rất tối.

Bạn có thể khắc phục vấn đề bằng cách thay đổi màu sắc điểm ảnh màu trắng của bạn:

const float color[] = {255.,255.,255.}; 

Và, tùy chọn, bằng cách tắt bình thường:

CImgDisplay local(image, "Hah", 0); 

Trong thay thế, bạn có thể bình thường hóa hình ảnh ban đầu trước khi lưu hoặc hiển thị nó:

image.draw_point(50,50,color); 
image.normalize(0, 255); 
image.save("file.bmp"); 

Tham chiếu:

+0

Đây chính là nó, không chuẩn hóa đúng cách. Cảm ơn! – Tneuktippa

1

Tôi không quen thuộc với thư viện này nhưng hành vi này sẽ ám chỉ rằng CImgDisplay diễn giải hình ảnh khác nhau khi hiển thị.

Tôi cho rằng màu trắng sẽ được xác định là const unsigned char color[] = {255,255,255}; để biểu thị giá trị RGB cho bitmap.

Tôi sẽ kiểm tra tài liệu cho CImg làm bước đầu tiên.

Các vấn đề liên quan