![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
КОЛИЧЕСТВО Цветов [D7]
Urvin © (2004-02-04 17:10:00)Каксделать уменьшения количествацветов в заданном рисунке. Как в Фотошопе ф-ция "Reduce Colors" - юзер вводит количество цветов, прога делает нужный рисунок.
Urvin (2004-02-14 21:16:00) [1]Да, помоему у меня что-то с мозгами. Алгоритм кривой очень, хотя правильный местами...
Fenik (2004-02-14 21:02:00) [2]>Urvin © (14.02.04 16:56) [9]
>Как-то это все недоступно...
Неправда. Всё доступно.
Если у меня будет сегодня желание, попробую сделать.
Fenik (2004-02-14 20:58:00) [3]И для 400 цветов медленно работает?
Не верю. Покажи как делал.
Urvin (2004-02-14 20:52:00) [4]Я знаю, о чем говорю... У меня есть массив цветов (400 штук разных цветов), и картинку я привожу к этим цветам. Вот. Но иногда хотелось бы, чтобы юзер выставлял кол-во цветов...
Fenik (2004-02-14 17:12:00) [5]>Прога все рано приводит картинку к палитре
Так у тебя что ли 256-цветное изображение? Палитра только у него. А если больше цветов, то палитры нет. Ты случайно не про "Сохранить для Web..." говоришь?
Urvin (2004-02-14 16:56:00) [6]Скорее всего так... Только мне кажется, что это все долго, и я уже пробовал так сделать - геморройно и пускай, у меня три коричневых и итдин синий цвет. Значит, я дожен коричневые объединить, а синий оставить... Как-то это все недоступно...
Может есть какой-нибудь алгоритм, если у меня N цветов в палитре (порядка 400) пользователь может ввести число M (не более 200). Прога все рано приводит картинку к палитре, может, туда надо че вставить?
Fenik (2004-02-14 15:43:00) [7]Мое предположение. Фотошоп считывает все имеющиеся уникальные цвета в массив. Далее находит наиболее близкие по яркости (к примеру) и объединяет их в один средний, попутно заменяя пиксели, которым принадлежали те цвета. И так, пока число уникальных цветов не приблизится к требуемому.
В принципе это не сложно. Сложнее добиться оптимального алгоритма.
Желаю удачи.
Urvin (2004-02-14 15:34:00) [8]Ну, что-то похожее, но не то. Тут получатся слишком произвольные цвета, и если установить слишком малое число цветов, картинку уже можно не узнать. Фотошоп же и при пяти цветах позволяет разглядеть картинку.
Fenik (2004-02-14 10:42:00) [9]Sapersky © (12.02.04 11:23) [5]
Дадад. Все верно. Почти.
functionBLimit(A: Integer): Byte;
begin
ifA < 0 thenResult := 0
else ifA > 255 thenResult := 255
elseResult := A;
end;
Sapersky (2004-02-12 11:23:00) [10]Возможно, это:
function BLimit(Value : DWord): Byte;
begin
If Value>255 then Result:=255 else Result:=Value;
end;
хотя с т.з. производительности вызов ф-ии по 3 раза на пиксель, наверное, не есть хорошо. Лучше вписать непосредственно в Posterize.
Urvin (2004-02-11 22:00:00) [11]А что такое BLimit?
Fenik (2004-02-05 17:23:00) [12]Не забудь
Bitmap.PixelFormat := pf24Bit;
Fenik (2004-02-05 17:22:00) [13]Это вот это? -
type
TRGB = packed record
B, G, R: Byte;
end;
pRGB = ^TRGB;
procedurePosterize(Bitmap: TBitmap; Amount: Integer);
varx, y: Integer;
Dest: pRGB;
begin
fory := 0 toBitmap.Height - 1 do begin
Dest := Bitmap.ScanLine[y];
forx := 0 toBitmap.Width - 1 do begin
withDest^ do begin
B := BLimit(Round(B/Amount)*Amount);
G := BLimit(Round(G/Amount)*Amount);
R := BLimit(Round(R/Amount)*Amount);
end;
Inc(Dest);
end;
end;
end;
Urvin (2004-02-05 15:13:00) [14]И это мастера!?