Растры в Windows

  • Автор темы zubr
  • Дата начала
Статус
Закрыто для дальнейших ответов.
Z

zubr

Гость
#1
У меня такая проблема: при копировании аппаратно-независимого растра TrueColor в 256-цветный, цвета передаются не совсем корректно. Использую системную палитру. Может кто подскажет как сделать палитру, чтобы цвета отображались максимально корректно.
 
P

Pete

Гость
#2
Нужно создавать адаптивную палитру, то есть такую которая наиболее близко с визуальной точки зрения описывает более многоцветное изображение. Например, как простейший вариант, посчитать гистограмму цветов, то есть сколько пикселов каждого цвета встречается на изображении и затем выбрать максимальные по количеству пикселов цвета. Проблема только в том, что нельзя построить функцию сравнения цветов, так как у цвета может быть 3-4 цветовые координаты.
 
Z

zubr

Гость
#3
Pete

Спасибо, попробую. Я делал немного не так. Взял картинку с небольшим количеством цветов - всего 67, из массива графических данных определил цвета и внес их в палитру, в итоге получилось еще хуже чем с системной палитрой.
 
P

Pete

Гость
#4
Странно такого быть не должно, так как потеря информации происходит только когда цветов больше в картинке, чем задано ограничением в 256 цветов. Кажется мне что ты перепутал порядок следования байтов в DIB =) BGR а не RGB.
 
Z

zubr

Гость
#5
Pete

Да, ты прав, я размещал в последовательности RGB - попробую наоборот.
 
K

Kernel

Гость
#6
1. Что значит цвета сравнивать нельзя ... можно по квадрату расстояния, по интенсивности, и по куче других характеристик
2. У цветов не бывает 4 цветовых компоненты - альфа не является "цветовой"
3. Если ты не уменьшив кол-во цветов ухудшил качество картинки то скорее всего ты либо а) не попал в индексы палитры либо б) вообще не заменил системную на свою (тоже бывает забывается сделать) ... т.к. если бы проблема была только в переставленных R и B каналах это было бы заметно невооружённым глазом :)
4.
и затем выбрать максимальные по количеству пикселов цвета.
с таким подхлдом получится полная фигня - в большинстве изображений цвета довольно плотно сконцентрированны в какой то области цветового пространства - и обработка портрета таким методом приведёт к тому чо облака на заднем плане будут цвета лица ...
на самом деле если надо сделать простейший вариант введи линейное квантование цветового пространства - быстро и в большинстве случаев нормально ... если не хвотает - делай адаптивную палитру просто из гипотезы компактности возми допустим алгоритм FOREL и примени его к цветовому пространству ... если и этого недостточно - diffusion dither тебе поможет
 
Статус
Закрыто для дальнейших ответов.