Конвертировать 1-битное изображение в 8-битное - PullRequest
2 голосов
/ 09 октября 2009

Как я могу преобразовать 1-битное изображение в 8-битное изображение с помощью C #? Какую цветовую матрицу следует использовать? Можете ли вы предоставить образцы или ссылки?

Ответы [ 2 ]

3 голосов
/ 10 октября 2009

Отказ от ответственности: я не знаю C #, но я сделал слишком много обработки изображений на C / C ++, поэтому я не могу передать ответ - я отвечу на C, так как я думаю, что C # имеет схожий синтаксис.

Палитру имеют как 1-битные (два цвета), так и 8-битные (256 цветов) изображения. но переход от 1-битного к 8-битному переходу очень прост - поскольку квантования не требуется, просто повышается частота дискретизации.

Сначала вам нужно выбрать (или импортировать) два цвета палитры 1-битного изображения. Если у вас их нет, я предлагаю использовать черный (0x000000FF) и белый (0xFFFFFFFF) для ясности (примечание: оба цвета - RGBA, я думаю, что окна используют ABGR). Это будет ваша «палитра».

Затем сопоставьте каждый цвет палитре - входное изображение будет иметь width * height / 8 байтов. Каждый байт представляет восемь пикселей. Поскольку я не знаю о вашем опыте работы с битами (то есть я не хочу сбивать вас с толку и не хочу, чтобы вы бездумно копировали и вставляли код, предоставленный вами в интернете), я оставлю этот ответ простой.

    // Insert your image's attributes here
int w = image.width;
int h = image.height;
    // Data of the image
u8* data = image.data;

/* 
 * Here, you should allocate (w * h) bytes of data.
 * I'm sure C# has ByteArray or something similar...
 * I'll call it output in my code.
 */

u8* output = new u8[w * h];
u8* walker = output;

    // Loop across each byte (8 pixels)
for(int i=0; i<w*h/8; ++i) {
        // Loop across each pixel
    for(int b=(1<<7); b>0; b>>=1) {
            // Expand pixel data to output
        *walker++ = !!(data[i] & b);
    }
}

Надеюсь, это поможет!

1 голос
/ 10 октября 2009

Помогает ли это:

http://www.wischik.com/lu/programmer/1bpp.html

Но, конечно, нужна некоторая очистка. Он может использовать некоторые try..finally для всех операций удаления и освобождения DC *

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...