用c ++编写bmp。 bmp显示错误

时间:2016-06-10 02:24:28

标签: c++ output rgb pixel bmp

我编写了自己的BMP类,但为了确定这是一个古怪的错误,我访问了这个网站:write your own bitmaps并下载了源代码。在主源文件中,您可以将四个像素设置为RGB值。代码如下所示:

//                      Red              Green
//                |---------------| |--------------|
uint8_t data[] = { 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00,
                   0x00, 0x00, 0xFF, 0xFF, 0x00, 0xFF };
//                |--------------|  |--------------|
//                     Blue              Purple

它保存在计算机上的图像看起来很好。 (第一个2x2图像是RedGreenBluePurple)

现在,例如,我将每个像素设置为(11,255,255):

//                      Blue              Blue
//                |---------------| |--------------|
uint8_t data[] = { 0x0B, 0xFF, 0xFF, 0x0B, 0xFF, 0xFF,
                   0x0B, 0xFF, 0xFF, 0x0B, 0xFF, 0xFF };
//                |--------------|  |--------------|
//                     Blue              Blue

图像看起来很好。 (第二个2x2图像为浅蓝色)

但现在,对于奇怪的东西。如果将任何RGB元素设置为NUMBER 10或0x0A,则图像会完全混乱!为了保持一致性,我将0x0B或数字11更改为10:

//                      What?              What?
//                |---------------| |--------------|
uint8_t data[] = { 0x0A, 0xFF, 0xFF, 0x0A, 0xFF, 0xFF,
                   0x0A, 0xFF, 0xFF, 0x0A, 0xFF, 0xFF };
//                |--------------|  |--------------|
//                     What?              What?

bmp是错的! (第三张2x2图像是RedBlueLightBlueYellow)

这是有趣的事情。让一切都变为紫色:

//                      Purple!              Purple!
//                |---------------| |--------------|
uint8_t data[] = { 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF,
                   0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF };
//                |--------------|  |--------------|
//                     Purple!              Purple!

图像排在第四位。 (全紫)

再次,让我们将其中一个像素中的一个元素设置为0x0A:

    //                      ?!              ?!
//                |---------------| |--------------|
uint8_t data[] = { 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF,
                   0xFF, 0x00, 0xFF, 0xFF, 0x0A, 0xFF };//set green element to 0x0A
//                |--------------|  |--------------|
//   

图像看起来很糟糕。这是最底层的。 (GreenLightBluePurpleDarkBlue)

我可能给出了太多的例子,但我真的很难过为什么会这样!我也在我自己的程序中得到完全相同的东西,我相信我正在做正确的填充和一切。你的意见?感谢。

这是2x2 bmp图像的链接。它们根据每个代码段从上到下组织。 2b2_bmp_images

0 个答案:

没有答案