Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.04.11;
Скачать: CL | DM;

Вниз

КОЛИЧЕСТВО Цветов   Найти похожие ветки 

 
Urvin ©   (2004-02-04 17:10) [0]

Каксделать уменьшения количествацветов в заданном рисунке. Как в Фотошопе ф-ция "Reduce Colors" - юзер вводит количество цветов, прога делает нужный рисунок.


 
Urvin ©   (2004-02-05 15:13) [1]

И это мастера!?


 
Fenik ©   (2004-02-05 17:22) [2]

Это вот это? -

type
 TRGB = packed record
   B, G, R: Byte;
 end;
 pRGB = ^TRGB;

procedure Posterize(Bitmap: TBitmap; Amount: Integer);
var x, y: Integer;
   Dest: pRGB;
begin
 for y := 0 to Bitmap.Height - 1 do begin
   Dest := Bitmap.ScanLine[y];
   for x := 0 to Bitmap.Width - 1 do begin
     with Dest^ 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;


 
Fenik ©   (2004-02-05 17:23) [3]

Не забудь
Bitmap.PixelFormat := pf24Bit;


 
Urvin ©   (2004-02-11 22:00) [4]

А что такое BLimit?


 
Sapersky ©   (2004-02-12 11:23) [5]

Возможно, это:

function BLimit(Value : DWord): Byte;
begin
If Value>255 then Result:=255 else Result:=Value;
end;

хотя с т.з. производительности вызов ф-ии по 3 раза на пиксель, наверное, не есть хорошо. Лучше вписать непосредственно в Posterize.


 
Fenik ©   (2004-02-14 10:42) [6]

Sapersky ©  (12.02.04 11:23) [5]

Дадад. Все верно. Почти.

function BLimit(A: Integer): Byte;
begin
if A < 0 then Result := 0
 else if A > 255 then Result := 255
  else Result := A;
end;


 
Urvin ©   (2004-02-14 15:34) [7]

Ну, что-то похожее, но не то. Тут получатся слишком произвольные цвета, и если установить слишком малое число цветов, картинку уже можно не узнать. Фотошоп же и при пяти цветах позволяет разглядеть картинку.


 
Fenik ©   (2004-02-14 15:43) [8]

Мое предположение. Фотошоп считывает все имеющиеся уникальные цвета в массив. Далее находит наиболее близкие по яркости (к примеру) и объединяет их в один средний, попутно заменяя пиксели, которым принадлежали те цвета. И так, пока число уникальных цветов не приблизится к требуемому.

В принципе это не сложно. Сложнее добиться оптимального алгоритма.
Желаю удачи.


 
Urvin ©   (2004-02-14 16:56) [9]

Скорее всего так... Только мне кажется, что это все долго, и я уже пробовал так сделать - геморройно и пускай, у меня три коричневых и итдин синий цвет. Значит, я дожен коричневые объединить, а синий оставить... Как-то это все недоступно...
Может есть какой-нибудь алгоритм, если у меня N цветов в палитре (порядка 400) пользователь может ввести число M (не более 200). Прога все рано приводит картинку к палитре, может, туда надо че вставить?


 
Fenik ©   (2004-02-14 17:12) [10]

>Прога все рано приводит картинку к палитре

Так у тебя что ли 256-цветное изображение? Палитра только у него. А если больше цветов, то палитры нет. Ты случайно не про "Сохранить для Web..." говоришь?


 
Urvin ©   (2004-02-14 20:52) [11]

Я знаю, о чем говорю... У меня есть массив цветов (400 штук разных цветов),  и картинку я привожу к этим цветам. Вот. Но иногда хотелось бы, чтобы юзер выставлял кол-во цветов...


 
Fenik ©   (2004-02-14 20:58) [12]

И для 400 цветов медленно работает?
Не верю. Покажи как делал.


 
Fenik ©   (2004-02-14 21:02) [13]

>Urvin ©  (14.02.04 16:56) [9]
>Как-то это все недоступно...

Неправда. Всё доступно.
Если у меня будет сегодня желание, попробую сделать.


 
Urvin ©   (2004-02-14 21:16) [14]

Да, помоему у меня что-то с мозгами. Алгоритм кривой очень, хотя правильный местами...



Страницы: 1 вся ветка

Текущий архив: 2004.04.11;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.044 c
3-1081497227
gedd
2004-04-09 11:53
2004.04.11
Rave Report ...


14-1082358913
Ega23
2004-04-19 11:15
2004.04.11
Редактор inf-файлов


7-1075284543
retro
2004-01-28 13:09
2004.04.11
Запуск приложения автоматически


3-1081877364
nika_ufc
2004-04-13 21:29
2004.04.11
проблема с АДО и TFileStream


1-1082550778
Алексей_
2004-04-21 16:32
2004.04.11
Как заблокировать переключение из полноэкранного режима в оконный