Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Конвертация из BMP в PDF(16bpp)


Автор: frutta007 9.6.2008, 19:08
При конвертации из BMP в PDF(картинка имеет 16bpp), без компрессии, stream(в PDF) заполнен нулями..В следствии чего на картинке появляется сероватый фон..Как это можно исправить..Может неправильно подсчитанно смещение?

вот мой подсчет сдвигов:

Код

WORD imData = imageData[offSet] + (imageData[offSet+1]<<8);
BYTE R = (imData>>10)&0x1f; 
BYTE G = (imData>>5)&0x3f;
BYTE B = (((imData) & 0x1f) * 8);
buf[bufPos++] = R<<3;
buf[bufPos++] = G<<3;
buf[bufPos++] = B;
offSet+=2; 

Автор: bsa 9.6.2008, 22:44
RRRRRGGG GGGBBBBB
вот и считай:
Код
red = (color >> 8) & 0xF8;
green = (color >> 3) & 0xFC
blue = (color << 3) & 0xF8;

Автор: frutta007 10.6.2008, 15:07
Этот подсчет получается на случай 565, а мне нужен 555, ты не мог бы пересчитать плиззз!!!!

Автор: bsa 10.6.2008, 18:13
http://msdn.microsoft.com/en-us/library/ms788140(VS.85).aspx

Автор: frutta007 10.6.2008, 18:54
Пробовал...то синий цвет преобладает , то ваще черный квадрат Малевича на выходе!!
Тот кусок который я выложил -самое близкое к результату...остается как-будто серая дымка на заднем плане...Перепробовал уже все...Щас в тупике!!!

Автор: bsa 10.6.2008, 19:02
frutta007, у тебя там 0x3F (6 бит), а надо 0x1F (5 бит). Именно поэтому я и решил, что у тебя 565

Автор: frutta007 16.6.2008, 19:18
Спасибо огромное ...помогло...но все-таки MSDN врет!!!!там не все так просто...он из белого делал серый!!!

Автор: bsa 16.6.2008, 20:30
frutta007, знаешь что такое серый? Это когда у тебя все три компонента равны между собой, но не равны 255.
Чтобы этого избежать, тебе надо при преобразовании еще доумножать на некоторый коэффициент: blue = 255 * ((color << 3) & 0xF8) / 0xF8

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)