DmitryRyvkin
|
опубликован 24-11-2001 01:37 MSK
На сколько я знаю ( во всяком случае я так работаю ) все не совсем так. Во-первых, DC не хранит информацию о цвете вообще, эту информацию хранит битмэп, который в нее выбран ( он выбран обязательно, например при создании CreateCompatibleDC в нее автоматом выбирается 1*1 ч/б битмэп. Поэтому надо просто загрузить битмап по скажем LoadBitmap и выбрать его в DC (dc.SelectObject (&myBitmap)). Все. Кстати насчет картинки можно не беспокоится, загрузится все что можно и отображено тоже будет все хорошо. Win позаботится. Во- всяком случае, у меня с этим проблем не было. А у тебя, раз есть HDC, грузиш битмэп и выбираеш в HDC (если не на MFC) SelectObject (hdc, HBITMAP)
|
DmitryRyvkin
|
опубликован 28-11-2001 06:54 MSK
Во - первых MFC тут не причем, LoadBitmap есть в GDI, вообще, мфц в 99 % случаев просто представляет АПИ в удобоваримом виде, не более. Во вторых, вопрос действительно неоднозначен. Для начала давайте оговоримся, что именно мы обсуждаем, чтоб не было моя - твоя - не понимает. Итак к примеру. Беру bmp 24 бит (32 ?), гружу в ACDSee. Хорошо. Включаю в системе 256 цветов (8 бит ). Становится не супер, но вобщем, смотреть можно. Теперь пытаюсь написать прогу, грузящую этот битмэп и показывающую его (совершенно не важно как , можно и из ClipBoard ). Смотрю . Цвета - ужаааасные. Все какое- то серо - бело- сине - черное. Очень мало цветов. Дела именно так у вас обстоят ? Тогда да, вопрос уходит в другую плоскость. Вот уж 2 часа разбираюсь, насколько Обратите внимание. Если попросить ACDSee первести картинку из 24 бит в 8 бит бмп, а потом глянуть бмп, то вначале (почти)увидим любопытный кусочек длиной 1024 байта. Как можно понять, ACDSee анализирует картинку, находит наиболее часто встречающиеся цвета, составляет из них массив 256 цветов, и пишет к заголовку битмэпа ( это не относится к высоким разрешениям). Поэтому и картинка в итоге выходит приличная. Если попросить вин отобразить ее в режиме 256 цветов, она будет использовать палитру по умолчанию на 20 цветов со всеми вытекающими... Те видимо, надо создавать палитру. Ето самый лучший выход, но придется сканировать на ходу картинку, сортировать массив, вобщем тихий ужас. Есть имхо еще вариант. Его ACDSee использует когда не переконвертирует, а просто отображает картинку при режиме 256 цветов. Для этого, похоже, надо создать более менее приличную палитру на 256 цветов и работать с ней. Все остальное не подойдет, так как будут использованы стандартные 20 цветов.Тут я не до конца разобрался, раньше никогда с палитрами не работал. Послушаем, кто что еще скажет. Если ничего путного не услышим, продолжу "исследования", а пока нет времени. Хотя чую у вас начисто пропало желание делать субж.
|