将float转换为unsigned char会导致错误的值

时间:2015-05-25 17:01:30

标签: c++ bmp

我创建了一个使用RGB值创建BMP图像的功能。

RGB值存储为浮点数,范围从0.0到1.0。

将值写入BMP文件时,它们的范围必须介于0到255.0之间,因此我将浮点数乘以255.0

他们还需要是未签名的字符。 编辑:除非你们中的一个人能想到更好的类型。

基本上我所做的就是这个

unsigned char pixel[3]
//BMP Expects BGR
pixel[0] = image.b*255.0;
pixel[1] = image.g*255.0;
pixel[2] = image.r*255.0;
fwrite(&pixel, 1, 3, file);

image.r是浮点数。

转换中似乎存在某种数据丢失,因为图像的某些部分在不应该出现时是黑色的。

BMP图像设置为每像素24位

我打算发布图片,但我没有足够的声誉。

编辑: BMP图像 http://tinypic.com/r/2qw3cdv/8

PRINTSCREEN http://tinypic.com/r/2q3rm07/8

基本上浅蓝色部分变黑。

如果我乘以128而不是图像更暗但准确。它开始变得奇怪180左右

0 个答案:

没有答案