Для мобильного приложения мне нужно создать 1-битный бит из 24-битного битового массива. Проблема в том, что результат неверен, поэтому я сделал этот небольшой проект, чтобы попробовать его на моем настольном ПК. создание работает, но результат не совсем, как вы можете видеть.24-бит-1 бит-бит-преобразование
Вы почти ничего не читаете, потому что много бит больше не находится в правильном положении, но перемещено несколько пикселей влево или вправо.
Это код, я использую для создания:
int z = 0;
int bitNumber = 0;
//the new 1Bit-byte-Array
byte[] oneBitImage = new byte[(bmp.Height * bmp.Width)/8];
BitmapData bmData = bmp.LockBits(new Rectangle(0, 0, bmp.Width, bmp.Height), ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb);
unsafe
{
byte* p = (byte*)(void*)bmData.Scan0.ToPointer();
int stopAddress = (int)p + bmp.Height * bmData.Stride;
while ((int)p != stopAddress)
{
if (*p < 128) // is black
oneBitImage[z] = (byte)(oneBitImage[z] | Exp(bitNumber)); //Set a Bit on the specified position
p += 3;
bitNumber++;
if (bitNumber == 8)
{
bitNumber = 0;
z++;
}
}
}
bmp.UnlockBits(bmData);
//Convert into 1-bit-bmp to check result
Bitmap newbmp = new Bitmap(bmp.Width, bmp.Height, PixelFormat.Format1bppIndexed);
BitmapData bmpData = newbmp.LockBits(
new Rectangle(0, 0, newbmp.Width, newbmp.Height),
ImageLockMode.WriteOnly, newbmp.PixelFormat);
Marshal.Copy(oneBitImage, 0, bmpData.Scan0, oneBitImage.Length);
newbmp.UnlockBits(bmpData);
newbmp.Save(fileName, ImageFormat.Bmp);
Краткое объяснение: Я бегу через каждый третий байт, и если этот байт - первый один из 3-байт-группы (пиксел 24 -бит) - ниже 128, я немного помещаю в указанную позицию. EXP дает мне экспоненту ...
Благодарю вас, сэр, вы удивительны. Я искал эту ошибку f ** king часами, все пробовал, но я был глуп, чтобы понять это. Кажется логичным для меня сейчас, что вы сказали мне ... я вам должен один - С уважением Карл – Karl
ОК. Но Алекс тоже прав, знаете ли, не просто принимайте значение синих каналов, но и учитывайте другие каналы. –
Да, но я сам создаю 24-битное изображение только с черным и белым, что не обязательно проверять других и делать еще два сравнения ... – Karl