0

While working with bitmaps I found a problem when I load a .bmpinto raw byte data. I work with 8bpp gray indexed bitmaps. I wrote this code to test the behaviour.

  void TestBitmap()
    {
        var startBytes = new byte[256];
        for (int i = 0; i < startBytes.Length; i++)
        {
            startBytes[i] = (byte)i;
        }
        SaveRawBufferToBitmap(startBytes, "1 - PreLoad.bmp");

        var bitmap = new Bitmap("1 - PreLoad.bmp");
        if (File.Exists("Bitmap.txt"))
            File.Delete("Bitmap.txt");
        for (int i = 0; i < 16; i++)
        {
            for (int j = 0; j < 16; j++)
            {
                File.AppendAllText("Bitmap.txt", $"{bitmap.GetPixel(j, i)}{Environment.NewLine}");
            }
        }

        var bmpdata = bitmap.LockBits(new System.Drawing.Rectangle(0, 0, bitmap.Width, bitmap.Height), ImageLockMode.ReadWrite, System.Drawing.Imaging.PixelFormat.Format8bppIndexed);
        int numbytes = bmpdata.Stride * bitmap.Height;
        byte[] bytes = new byte[numbytes];
        IntPtr ptr = bmpdata.Scan0;
        Marshal.Copy(ptr, bytes, 0, numbytes);
        bitmap.UnlockBits(bmpdata);

        if (File.Exists("Bytes.txt"))
            File.Delete("Bytes.txt");
        for (int i = 0; i < bytes.Length; i++)
        {
            File.AppendAllText("Bytes.txt", $"{bytes[i]} ");
        }

        SaveRawBufferToBitmap(bytes, "2 - PostLoad.bmp");
    }


    public static void SaveRawBufferToBitmap(byte[] buffer, string path)
    {
        WriteableBitmap imageWritable;
        var rect = new Int32Rect(0, 0, 16, 16);
        var imageRotated = new byte[256];

        if (File.Exists(path))
            File.Delete(path);

        imageWritable = new WriteableBitmap(16, 16, 96, 96, System.Windows.Media.PixelFormats.Gray8, null);
        imageWritable.WritePixels(rect, buffer, 16, 0);
        using (FileStream stream = new FileStream(path, FileMode.Create))
        {
            var encoder = new TiffBitmapEncoder();
            encoder.Frames.Add(BitmapFrame.Create(imageWritable));
            encoder.Save(stream);
            stream.Close();
        }
    }

I create an array of 256 bytes ranging from 0 to 255 value. Then I write a 16x16 bitmap from these raw data, going from black to white. Next, I reopen the saved bitmap and convert it to a byte array and save the raw data as text. Finally I save a second bitmap to check the consistency.

What I found is that on my PC with Windows 10, the .txt data is ok, as expected. Bitmap.txt:

Color [A=255, R=0, G=0, B=0]
Color [A=255, R=1, G=1, B=1]
Color [A=255, R=2, G=2, B=2]
Color [A=255, R=3, G=3, B=3]
Color [A=255, R=4, G=4, B=4]
Color [A=255, R=5, G=5, B=5]
Color [A=255, R=6, G=6, B=6]
Color [A=255, R=7, G=7, B=7]
Color [A=255, R=8, G=8, B=8]
Color [A=255, R=9, G=9, B=9]
Color [A=255, R=10, G=10, B=10]
Color [A=255, R=11, G=11, B=11]
Color [A=255, R=12, G=12, B=12]
Color [A=255, R=13, G=13, B=13]
Color [A=255, R=14, G=14, B=14]
Color [A=255, R=15, G=15, B=15]
Color [A=255, R=16, G=16, B=16]
Color [A=255, R=17, G=17, B=17]
Color [A=255, R=18, G=18, B=18]
Color [A=255, R=19, G=19, B=19]
Color [A=255, R=20, G=20, B=20]
Color [A=255, R=21, G=21, B=21]
Color [A=255, R=22, G=22, B=22]
Color [A=255, R=23, G=23, B=23]
Color [A=255, R=24, G=24, B=24]
Color [A=255, R=25, G=25, B=25]
Color [A=255, R=26, G=26, B=26]
Color [A=255, R=27, G=27, B=27]
Color [A=255, R=28, G=28, B=28]
Color [A=255, R=29, G=29, B=29]
Color [A=255, R=30, G=30, B=30]
Color [A=255, R=31, G=31, B=31]
Color [A=255, R=32, G=32, B=32]
Color [A=255, R=33, G=33, B=33]
Color [A=255, R=34, G=34, B=34]
Color [A=255, R=35, G=35, B=35]
Color [A=255, R=36, G=36, B=36]
Color [A=255, R=37, G=37, B=37]
Color [A=255, R=38, G=38, B=38]
Color [A=255, R=39, G=39, B=39]
Color [A=255, R=40, G=40, B=40]
Color [A=255, R=41, G=41, B=41]
Color [A=255, R=42, G=42, B=42]
Color [A=255, R=43, G=43, B=43]
Color [A=255, R=44, G=44, B=44]
Color [A=255, R=45, G=45, B=45]
Color [A=255, R=46, G=46, B=46]
Color [A=255, R=47, G=47, B=47]
Color [A=255, R=48, G=48, B=48]
Color [A=255, R=49, G=49, B=49]
Color [A=255, R=50, G=50, B=50]
Color [A=255, R=51, G=51, B=51]
Color [A=255, R=52, G=52, B=52]
Color [A=255, R=53, G=53, B=53]
Color [A=255, R=54, G=54, B=54]
Color [A=255, R=55, G=55, B=55]
Color [A=255, R=56, G=56, B=56]
Color [A=255, R=57, G=57, B=57]
Color [A=255, R=58, G=58, B=58]
Color [A=255, R=59, G=59, B=59]
Color [A=255, R=60, G=60, B=60]
Color [A=255, R=61, G=61, B=61]
Color [A=255, R=62, G=62, B=62]
Color [A=255, R=63, G=63, B=63]
Color [A=255, R=64, G=64, B=64]
Color [A=255, R=65, G=65, B=65]
Color [A=255, R=66, G=66, B=66]
Color [A=255, R=67, G=67, B=67]
Color [A=255, R=68, G=68, B=68]
Color [A=255, R=69, G=69, B=69]
Color [A=255, R=70, G=70, B=70]
Color [A=255, R=71, G=71, B=71]
Color [A=255, R=72, G=72, B=72]
Color [A=255, R=73, G=73, B=73]
Color [A=255, R=74, G=74, B=74]
Color [A=255, R=75, G=75, B=75]
Color [A=255, R=76, G=76, B=76]
Color [A=255, R=77, G=77, B=77]
Color [A=255, R=78, G=78, B=78]
Color [A=255, R=79, G=79, B=79]
Color [A=255, R=80, G=80, B=80]
Color [A=255, R=81, G=81, B=81]
Color [A=255, R=82, G=82, B=82]
Color [A=255, R=83, G=83, B=83]
Color [A=255, R=84, G=84, B=84]
Color [A=255, R=85, G=85, B=85]
Color [A=255, R=86, G=86, B=86]
Color [A=255, R=87, G=87, B=87]
Color [A=255, R=88, G=88, B=88]
Color [A=255, R=89, G=89, B=89]
Color [A=255, R=90, G=90, B=90]
Color [A=255, R=91, G=91, B=91]
Color [A=255, R=92, G=92, B=92]
Color [A=255, R=93, G=93, B=93]
Color [A=255, R=94, G=94, B=94]
Color [A=255, R=95, G=95, B=95]
Color [A=255, R=96, G=96, B=96]
Color [A=255, R=97, G=97, B=97]
Color [A=255, R=98, G=98, B=98]
Color [A=255, R=99, G=99, B=99]
Color [A=255, R=100, G=100, B=100]
Color [A=255, R=101, G=101, B=101]
Color [A=255, R=102, G=102, B=102]
Color [A=255, R=103, G=103, B=103]
Color [A=255, R=104, G=104, B=104]
Color [A=255, R=105, G=105, B=105]
Color [A=255, R=106, G=106, B=106]
Color [A=255, R=107, G=107, B=107]
Color [A=255, R=108, G=108, B=108]
Color [A=255, R=109, G=109, B=109]
Color [A=255, R=110, G=110, B=110]
Color [A=255, R=111, G=111, B=111]
Color [A=255, R=112, G=112, B=112]
Color [A=255, R=113, G=113, B=113]
Color [A=255, R=114, G=114, B=114]
Color [A=255, R=115, G=115, B=115]
Color [A=255, R=116, G=116, B=116]
Color [A=255, R=117, G=117, B=117]
Color [A=255, R=118, G=118, B=118]
Color [A=255, R=119, G=119, B=119]
Color [A=255, R=120, G=120, B=120]
Color [A=255, R=121, G=121, B=121]
Color [A=255, R=122, G=122, B=122]
Color [A=255, R=123, G=123, B=123]
Color [A=255, R=124, G=124, B=124]
Color [A=255, R=125, G=125, B=125]
Color [A=255, R=126, G=126, B=126]
Color [A=255, R=127, G=127, B=127]
Color [A=255, R=128, G=128, B=128]
Color [A=255, R=129, G=129, B=129]
Color [A=255, R=130, G=130, B=130]
Color [A=255, R=131, G=131, B=131]
Color [A=255, R=132, G=132, B=132]
Color [A=255, R=133, G=133, B=133]
Color [A=255, R=134, G=134, B=134]
Color [A=255, R=135, G=135, B=135]
Color [A=255, R=136, G=136, B=136]
Color [A=255, R=137, G=137, B=137]
Color [A=255, R=138, G=138, B=138]
Color [A=255, R=139, G=139, B=139]
Color [A=255, R=140, G=140, B=140]
Color [A=255, R=141, G=141, B=141]
Color [A=255, R=142, G=142, B=142]
Color [A=255, R=143, G=143, B=143]
Color [A=255, R=144, G=144, B=144]
Color [A=255, R=145, G=145, B=145]
Color [A=255, R=146, G=146, B=146]
Color [A=255, R=147, G=147, B=147]
Color [A=255, R=148, G=148, B=148]
Color [A=255, R=149, G=149, B=149]
Color [A=255, R=150, G=150, B=150]
Color [A=255, R=151, G=151, B=151]
Color [A=255, R=152, G=152, B=152]
Color [A=255, R=153, G=153, B=153]
Color [A=255, R=154, G=154, B=154]
Color [A=255, R=155, G=155, B=155]
Color [A=255, R=156, G=156, B=156]
Color [A=255, R=157, G=157, B=157]
Color [A=255, R=158, G=158, B=158]
Color [A=255, R=159, G=159, B=159]
Color [A=255, R=160, G=160, B=160]
Color [A=255, R=161, G=161, B=161]
Color [A=255, R=162, G=162, B=162]
Color [A=255, R=163, G=163, B=163]
Color [A=255, R=164, G=164, B=164]
Color [A=255, R=165, G=165, B=165]
Color [A=255, R=166, G=166, B=166]
Color [A=255, R=167, G=167, B=167]
Color [A=255, R=168, G=168, B=168]
Color [A=255, R=169, G=169, B=169]
Color [A=255, R=170, G=170, B=170]
Color [A=255, R=171, G=171, B=171]
Color [A=255, R=172, G=172, B=172]
Color [A=255, R=173, G=173, B=173]
Color [A=255, R=174, G=174, B=174]
Color [A=255, R=175, G=175, B=175]
Color [A=255, R=176, G=176, B=176]
Color [A=255, R=177, G=177, B=177]
Color [A=255, R=178, G=178, B=178]
Color [A=255, R=179, G=179, B=179]
Color [A=255, R=180, G=180, B=180]
Color [A=255, R=181, G=181, B=181]
Color [A=255, R=182, G=182, B=182]
Color [A=255, R=183, G=183, B=183]
Color [A=255, R=184, G=184, B=184]
Color [A=255, R=185, G=185, B=185]
Color [A=255, R=186, G=186, B=186]
Color [A=255, R=187, G=187, B=187]
Color [A=255, R=188, G=188, B=188]
Color [A=255, R=189, G=189, B=189]
Color [A=255, R=190, G=190, B=190]
Color [A=255, R=191, G=191, B=191]
Color [A=255, R=192, G=192, B=192]
Color [A=255, R=193, G=193, B=193]
Color [A=255, R=194, G=194, B=194]
Color [A=255, R=195, G=195, B=195]
Color [A=255, R=196, G=196, B=196]
Color [A=255, R=197, G=197, B=197]
Color [A=255, R=198, G=198, B=198]
Color [A=255, R=199, G=199, B=199]
Color [A=255, R=200, G=200, B=200]
Color [A=255, R=201, G=201, B=201]
Color [A=255, R=202, G=202, B=202]
Color [A=255, R=203, G=203, B=203]
Color [A=255, R=204, G=204, B=204]
Color [A=255, R=205, G=205, B=205]
Color [A=255, R=206, G=206, B=206]
Color [A=255, R=207, G=207, B=207]
Color [A=255, R=208, G=208, B=208]
Color [A=255, R=209, G=209, B=209]
Color [A=255, R=210, G=210, B=210]
Color [A=255, R=211, G=211, B=211]
Color [A=255, R=212, G=212, B=212]
Color [A=255, R=213, G=213, B=213]
Color [A=255, R=214, G=214, B=214]
Color [A=255, R=215, G=215, B=215]
Color [A=255, R=216, G=216, B=216]
Color [A=255, R=217, G=217, B=217]
Color [A=255, R=218, G=218, B=218]
Color [A=255, R=219, G=219, B=219]
Color [A=255, R=220, G=220, B=220]
Color [A=255, R=221, G=221, B=221]
Color [A=255, R=222, G=222, B=222]
Color [A=255, R=223, G=223, B=223]
Color [A=255, R=224, G=224, B=224]
Color [A=255, R=225, G=225, B=225]
Color [A=255, R=226, G=226, B=226]
Color [A=255, R=227, G=227, B=227]
Color [A=255, R=228, G=228, B=228]
Color [A=255, R=229, G=229, B=229]
Color [A=255, R=230, G=230, B=230]
Color [A=255, R=231, G=231, B=231]
Color [A=255, R=232, G=232, B=232]
Color [A=255, R=233, G=233, B=233]
Color [A=255, R=234, G=234, B=234]
Color [A=255, R=235, G=235, B=235]
Color [A=255, R=236, G=236, B=236]
Color [A=255, R=237, G=237, B=237]
Color [A=255, R=238, G=238, B=238]
Color [A=255, R=239, G=239, B=239]
Color [A=255, R=240, G=240, B=240]
Color [A=255, R=241, G=241, B=241]
Color [A=255, R=242, G=242, B=242]
Color [A=255, R=243, G=243, B=243]
Color [A=255, R=244, G=244, B=244]
Color [A=255, R=245, G=245, B=245]
Color [A=255, R=246, G=246, B=246]
Color [A=255, R=247, G=247, B=247]
Color [A=255, R=248, G=248, B=248]
Color [A=255, R=249, G=249, B=249]
Color [A=255, R=250, G=250, B=250]
Color [A=255, R=251, G=251, B=251]
Color [A=255, R=252, G=252, B=252]
Color [A=255, R=253, G=253, B=253]
Color [A=255, R=254, G=254, B=254]
Color [A=255, R=255, G=255, B=255]

Bytes.txt:

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 

On other PCs equipped with Windows 7 instead, the data is wrong. Bitmap.txt:

Color [A=255, R=0, G=0, B=0]
Color [A=255, R=0, G=0, B=0]
Color [A=255, R=0, G=0, B=0]
Color [A=255, R=0, G=0, B=0]
Color [A=255, R=0, G=0, B=0]
Color [A=255, R=0, G=0, B=0]
Color [A=255, R=0, G=0, B=0]
Color [A=255, R=0, G=0, B=0]
Color [A=255, R=0, G=0, B=0]
Color [A=255, R=0, G=0, B=0]
Color [A=255, R=0, G=0, B=0]
Color [A=255, R=0, G=0, B=0]
Color [A=255, R=17, G=17, B=17]
Color [A=255, R=0, G=0, B=0]
Color [A=255, R=17, G=17, B=17]
Color [A=255, R=0, G=0, B=0]
Color [A=255, R=17, G=17, B=17]
Color [A=255, R=17, G=17, B=17]
Color [A=255, R=17, G=17, B=17]
Color [A=255, R=17, G=17, B=17]
Color [A=255, R=17, G=17, B=17]
Color [A=255, R=17, G=17, B=17]
Color [A=255, R=34, G=34, B=34]
Color [A=255, R=17, G=17, B=17]
Color [A=255, R=34, G=34, B=34]
Color [A=255, R=34, G=34, B=34]
Color [A=255, R=34, G=34, B=34]
Color [A=255, R=34, G=34, B=34]
Color [A=255, R=17, G=17, B=17]
Color [A=255, R=34, G=34, B=34]
Color [A=255, R=34, G=34, B=34]
Color [A=255, R=34, G=34, B=34]
Color [A=255, R=34, G=34, B=34]
Color [A=255, R=34, G=34, B=34]
Color [A=255, R=34, G=34, B=34]
Color [A=255, R=34, G=34, B=34]
Color [A=255, R=34, G=34, B=34]
Color [A=255, R=34, G=34, B=34]
Color [A=255, R=34, G=34, B=34]
Color [A=255, R=51, G=51, B=51]
Color [A=255, R=34, G=34, B=34]
Color [A=255, R=34, G=34, B=34]
Color [A=255, R=34, G=34, B=34]
Color [A=255, R=34, G=34, B=34]
Color [A=255, R=51, G=51, B=51]
Color [A=255, R=51, G=51, B=51]
Color [A=255, R=34, G=34, B=34]
Color [A=255, R=51, G=51, B=51]
Color [A=255, R=34, G=34, B=34]
Color [A=255, R=51, G=51, B=51]
Color [A=255, R=51, G=51, B=51]
Color [A=255, R=51, G=51, B=51]
Color [A=255, R=51, G=51, B=51]
Color [A=255, R=51, G=51, B=51]
Color [A=255, R=51, G=51, B=51]
Color [A=255, R=51, G=51, B=51]
Color [A=255, R=51, G=51, B=51]
Color [A=255, R=68, G=68, B=68]
Color [A=255, R=68, G=68, B=68]
Color [A=255, R=51, G=51, B=51]
Color [A=255, R=68, G=68, B=68]
Color [A=255, R=51, G=51, B=51]
Color [A=255, R=68, G=68, B=68]
Color [A=255, R=68, G=68, B=68]
Color [A=255, R=68, G=68, B=68]
Color [A=255, R=68, G=68, B=68]
Color [A=255, R=68, G=68, B=68]
Color [A=255, R=68, G=68, B=68]
Color [A=255, R=68, G=68, B=68]
Color [A=255, R=68, G=68, B=68]
Color [A=255, R=68, G=68, B=68]
Color [A=255, R=68, G=68, B=68]
Color [A=255, R=85, G=85, B=85]
Color [A=255, R=68, G=68, B=68]
Color [A=255, R=68, G=68, B=68]
Color [A=255, R=68, G=68, B=68]
Color [A=255, R=85, G=85, B=85]
Color [A=255, R=68, G=68, B=68]
Color [A=255, R=85, G=85, B=85]
Color [A=255, R=68, G=68, B=68]
Color [A=255, R=85, G=85, B=85]
Color [A=255, R=68, G=68, B=68]
Color [A=255, R=85, G=85, B=85]
Color [A=255, R=85, G=85, B=85]
Color [A=255, R=85, G=85, B=85]
Color [A=255, R=85, G=85, B=85]
Color [A=255, R=85, G=85, B=85]
Color [A=255, R=85, G=85, B=85]
Color [A=255, R=85, G=85, B=85]
Color [A=255, R=85, G=85, B=85]
Color [A=255, R=102, G=102, B=102]
Color [A=255, R=85, G=85, B=85]
Color [A=255, R=102, G=102, B=102]
Color [A=255, R=85, G=85, B=85]
Color [A=255, R=102, G=102, B=102]
Color [A=255, R=102, G=102, B=102]
Color [A=255, R=85, G=85, B=85]
Color [A=255, R=102, G=102, B=102]
Color [A=255, R=102, G=102, B=102]
Color [A=255, R=102, G=102, B=102]
Color [A=255, R=102, G=102, B=102]
Color [A=255, R=102, G=102, B=102]
Color [A=255, R=102, G=102, B=102]
Color [A=255, R=102, G=102, B=102]
Color [A=255, R=119, G=119, B=119]
Color [A=255, R=102, G=102, B=102]
Color [A=255, R=102, G=102, B=102]
Color [A=255, R=102, G=102, B=102]
Color [A=255, R=102, G=102, B=102]
Color [A=255, R=119, G=119, B=119]
Color [A=255, R=102, G=102, B=102]
Color [A=255, R=102, G=102, B=102]
Color [A=255, R=119, G=119, B=119]
Color [A=255, R=102, G=102, B=102]
Color [A=255, R=119, G=119, B=119]
Color [A=255, R=119, G=119, B=119]
Color [A=255, R=119, G=119, B=119]
Color [A=255, R=119, G=119, B=119]
Color [A=255, R=119, G=119, B=119]
Color [A=255, R=119, G=119, B=119]
Color [A=255, R=119, G=119, B=119]
Color [A=255, R=119, G=119, B=119]
Color [A=255, R=136, G=136, B=136]
Color [A=255, R=119, G=119, B=119]
Color [A=255, R=119, G=119, B=119]
Color [A=255, R=136, G=136, B=136]
Color [A=255, R=119, G=119, B=119]
Color [A=255, R=136, G=136, B=136]
Color [A=255, R=119, G=119, B=119]
Color [A=255, R=136, G=136, B=136]
Color [A=255, R=119, G=119, B=119]
Color [A=255, R=136, G=136, B=136]
Color [A=255, R=119, G=119, B=119]
Color [A=255, R=136, G=136, B=136]
Color [A=255, R=136, G=136, B=136]
Color [A=255, R=136, G=136, B=136]
Color [A=255, R=136, G=136, B=136]
Color [A=255, R=136, G=136, B=136]
Color [A=255, R=136, G=136, B=136]
Color [A=255, R=136, G=136, B=136]
Color [A=255, R=136, G=136, B=136]
Color [A=255, R=136, G=136, B=136]
Color [A=255, R=153, G=153, B=153]
Color [A=255, R=136, G=136, B=136]
Color [A=255, R=153, G=153, B=153]
Color [A=255, R=136, G=136, B=136]
Color [A=255, R=153, G=153, B=153]
Color [A=255, R=153, G=153, B=153]
Color [A=255, R=153, G=153, B=153]
Color [A=255, R=153, G=153, B=153]
Color [A=255, R=136, G=136, B=136]
Color [A=255, R=153, G=153, B=153]
Color [A=255, R=153, G=153, B=153]
Color [A=255, R=153, G=153, B=153]
Color [A=255, R=153, G=153, B=153]
Color [A=255, R=153, G=153, B=153]
Color [A=255, R=170, G=170, B=170]
Color [A=255, R=153, G=153, B=153]
Color [A=255, R=153, G=153, B=153]
Color [A=255, R=170, G=170, B=170]
Color [A=255, R=170, G=170, B=170]
Color [A=255, R=153, G=153, B=153]
Color [A=255, R=170, G=170, B=170]
Color [A=255, R=153, G=153, B=153]
Color [A=255, R=153, G=153, B=153]
Color [A=255, R=170, G=170, B=170]
Color [A=255, R=170, G=170, B=170]
Color [A=255, R=170, G=170, B=170]
Color [A=255, R=170, G=170, B=170]
Color [A=255, R=170, G=170, B=170]
Color [A=255, R=170, G=170, B=170]
Color [A=255, R=170, G=170, B=170]
Color [A=255, R=170, G=170, B=170]
Color [A=255, R=170, G=170, B=170]
Color [A=255, R=170, G=170, B=170]
Color [A=255, R=170, G=170, B=170]
Color [A=255, R=170, G=170, B=170]
Color [A=255, R=187, G=187, B=187]
Color [A=255, R=170, G=170, B=170]
Color [A=255, R=187, G=187, B=187]
Color [A=255, R=187, G=187, B=187]
Color [A=255, R=170, G=170, B=170]
Color [A=255, R=187, G=187, B=187]
Color [A=255, R=187, G=187, B=187]
Color [A=255, R=187, G=187, B=187]
Color [A=255, R=187, G=187, B=187]
Color [A=255, R=187, G=187, B=187]
Color [A=255, R=187, G=187, B=187]
Color [A=255, R=187, G=187, B=187]
Color [A=255, R=187, G=187, B=187]
Color [A=255, R=204, G=204, B=204]
Color [A=255, R=187, G=187, B=187]
Color [A=255, R=187, G=187, B=187]
Color [A=255, R=187, G=187, B=187]
Color [A=255, R=204, G=204, B=204]
Color [A=255, R=187, G=187, B=187]
Color [A=255, R=187, G=187, B=187]
Color [A=255, R=204, G=204, B=204]
Color [A=255, R=187, G=187, B=187]
Color [A=255, R=204, G=204, B=204]
Color [A=255, R=187, G=187, B=187]
Color [A=255, R=204, G=204, B=204]
Color [A=255, R=204, G=204, B=204]
Color [A=255, R=204, G=204, B=204]
Color [A=255, R=204, G=204, B=204]
Color [A=255, R=204, G=204, B=204]
Color [A=255, R=204, G=204, B=204]
Color [A=255, R=204, G=204, B=204]
Color [A=255, R=221, G=221, B=221]
Color [A=255, R=204, G=204, B=204]
Color [A=255, R=204, G=204, B=204]
Color [A=255, R=221, G=221, B=221]
Color [A=255, R=221, G=221, B=221]
Color [A=255, R=204, G=204, B=204]
Color [A=255, R=221, G=221, B=221]
Color [A=255, R=221, G=221, B=221]
Color [A=255, R=221, G=221, B=221]
Color [A=255, R=221, G=221, B=221]
Color [A=255, R=221, G=221, B=221]
Color [A=255, R=221, G=221, B=221]
Color [A=255, R=221, G=221, B=221]
Color [A=255, R=221, G=221, B=221]
Color [A=255, R=221, G=221, B=221]
Color [A=255, R=221, G=221, B=221]
Color [A=255, R=221, G=221, B=221]
Color [A=255, R=221, G=221, B=221]
Color [A=255, R=238, G=238, B=238]
Color [A=255, R=221, G=221, B=221]
Color [A=255, R=221, G=221, B=221]
Color [A=255, R=221, G=221, B=221]
Color [A=255, R=238, G=238, B=238]
Color [A=255, R=221, G=221, B=221]
Color [A=255, R=221, G=221, B=221]
Color [A=255, R=238, G=238, B=238]
Color [A=255, R=221, G=221, B=221]
Color [A=255, R=238, G=238, B=238]
Color [A=255, R=238, G=238, B=238]
Color [A=255, R=238, G=238, B=238]
Color [A=255, R=238, G=238, B=238]
Color [A=255, R=238, G=238, B=238]
Color [A=255, R=238, G=238, B=238]
Color [A=255, R=238, G=238, B=238]
Color [A=255, R=238, G=238, B=238]
Color [A=255, R=238, G=238, B=238]
Color [A=255, R=255, G=255, B=255]
Color [A=255, R=255, G=255, B=255]
Color [A=255, R=238, G=238, B=238]
Color [A=255, R=255, G=255, B=255]
Color [A=255, R=255, G=255, B=255]
Color [A=255, R=238, G=238, B=238]
Color [A=255, R=255, G=255, B=255]
Color [A=255, R=255, G=255, B=255]
Color [A=255, R=255, G=255, B=255]
Color [A=255, R=255, G=255, B=255]
Color [A=255, R=255, G=255, B=255]
Color [A=255, R=255, G=255, B=255]

Bytes.txt:

0 0 0 0 0 0 0 0 0 0 0 0 17 0 17 0 17 17 17 17 17 17 34 17 34 34 34 34 17 34 34 34 34 34 34 34 34 34 34 51 34 34 34 34 51 51 34 51 34 51 51 51 51 51 51 51 51 68 68 51 68 51 68 68 68 68 68 68 68 68 68 68 85 68 68 68 85 68 85 68 85 68 85 85 85 85 85 85 85 85 102 85 102 85 102 102 85 102 102 102 102 102 102 102 119 102 102 102 102 119 102 102 119 102 119 119 119 119 119 119 119 119 136 119 119 136 119 136 119 136 119 136 119 136 136 136 136 136 136 136 136 136 153 136 153 136 153 153 153 153 136 153 153 153 153 153 170 153 153 170 170 153 170 153 153 170 170 170 170 170 170 170 170 170 170 170 170 187 170 187 187 170 187 187 187 187 187 187 187 187 204 187 187 187 204 187 187 204 187 204 187 204 204 204 204 204 204 204 221 204 204 221 221 204 221 221 221 221 221 221 221 221 221 221 221 221 238 221 221 221 238 221 221 238 221 238 238 238 238 238 238 238 238 238 255 255 238 255 255 238 255 255 255 255 255 255 

It looks like the raw data is indexed in a wrong way, even if I explicitly force the 8bpp pixel format when getting the bitmap data. Also the second bitmap is saved differently from the first one.

enter image description here

Any idea about what the problem is? Are you able to reproduce the issue? Thank you!

Bizhan
  • 16,157
  • 9
  • 63
  • 101
LoriB
  • 356
  • 3
  • 7
  • different .net framework versions maybe? – vasily.sib Jul 03 '18 at 08:44
  • Sorry, I forgot to mention that! Version is always 4.7.1. – LoriB Jul 03 '18 at 08:48
  • It certainly doesn't matter much, but is there a particular reason why you're using a TiffBitmapEncoder to write a `.bmp` file? – Clemens Jul 03 '18 at 08:51
  • Because the method comes from my actual code where I use 16bpp .tiff images instead of .bmp. Anyway I will also try changing the saving method, just to be sure that it does not affect the bitmap. – LoriB Jul 03 '18 at 08:57
  • 2
    Also note that `Format8bppIndexed` is a different format than `Gray8`. The former is for a paletted bitmap with 256 colors, the latter is without palette, 8bpp gray scale. As there is nothing like `Format8bppGrayScale` in GDI+ (in contrast to `Format16bppGrayScale`), loading a Bitmap from 8bpp gray scale might generate palette entries in arbitrary order. Just a guess. – Clemens Jul 03 '18 at 09:01
  • This is interesting. Can you please expand on that? What is the right System.Drawing.Imaging.PixelFormat supposed to load a System.Windows.Media.PixelFormats.Gray8 bitmap then? – LoriB Jul 03 '18 at 09:07
  • I have no idea, sorry. – Clemens Jul 03 '18 at 09:07
  • As another note, `SaveRawBufferToBitmap(startBytes, "2 - PostLoad.bmp")` will of course write the same bitmap as `1 - PreLoad.bmp`, because you used `startBytes` instead of `bytes`. So, not actually a consistency check. – Clemens Jul 03 '18 at 09:15
  • Thank you for pointing out the bug! The bitmaps are now actually different. I'm going to update the open post. – LoriB Jul 03 '18 at 09:26
  • There is no specific grayscale 8-bit pixel format in System.Drawing. It's just an 8bpp indexed image with its palette set to a fade from #000000 to #FFFFFF, to accommodate pixel index values that correspond to brightness. – Nyerguds Jul 03 '18 at 09:28
  • @LoriB But you have understood that LockBits on an index pixel format doesn't give you the pixel color values, but only the indexes into the color palette? To me it's entirely unclear why you are doing all this at all. What are you *actually* trying to achieve? – Clemens Jul 03 '18 at 09:37
  • My goal is to perform algorithms and computation on an image's raw pixel values/data. Please note in my updated post, that also using just var bitmap = new Bitmap("1 - PreLoad.bmp"); and then bitmap.GetPixel() leads to the same issue. So it looks like the bitmap.LockBits() part and so on is not the cause of the problem. – LoriB Jul 03 '18 at 09:58
  • Then why are you using System.Drawing.Bitmap? You can do everything with WPF's WriateableBitmap. – Clemens Jul 03 '18 at 10:06
  • Actually it looks like using BitmapImage instad of Bitmap does not lead to the issue! – LoriB Jul 03 '18 at 10:28
  • You should check what the palette of your reloaded image contains. I'm betting it's _not_ a simple #000000 to #FFFFFF fade. – Nyerguds Jul 03 '18 at 12:04
  • Possible duplicate of [Editing 8bpp indexed Bitmaps](https://stackoverflow.com/questions/2593212/editing-8bpp-indexed-bitmaps) – Bizhan Jul 03 '18 at 17:44

0 Answers0