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

Вниз

Количество уникальных цветов в изображении   Найти похожие ветки 

 
Ricks ©   (2007-03-09 23:03) [0]

Каким образом это можно подсчитать?


 
Sapersky   (2007-03-10 10:56) [1]

Создать массив цветов, пройти по картинке, для каждого пикселя проверить - если его нет в массиве, увеличить счётчик, занести цвет в массив. Например, так:
(http://sourceforge.net/project/showfiles.php?group_id=173551)

function Count24(Bmp:TFastDIB):Integer;
type
 PCheck =^TCheck;
 TCheck = array[Byte,Byte,0..31]of Byte;
var
 pb: PByte;
 pc: PFColor;
 Check: PCheck;
 x,y,c: Integer;
begin
 Result:=0;
 New(Check);
 FillChar(Check^,SizeOf(TCheck),0);
 pc:=Pointer(Bmp.Bits);
 for y:=0 to Bmp.AbsHeight-1 do begin
   for x:=0 to Bmp.Width-1 do begin
     pb:=@Check[pc.r,pc.g,pc.b shr 3];
     c:=1 shl(pc.b and 7);
     if(c and pb^)=0 then begin
       Inc(Result);
       pb^:=pb^ or c;
     end;
     Inc(pc);
   end;
   pc:=Ptr(Integer(pc)+Bmp.Gap);
 end;
 Dispose(Check);
end;

Массив [Byte,Byte,0..31] of Byte - это, в некотором смысле, эмуляция массива [Byte,Byte,Byte] of Bit. Можно написать просто [Byte,Byte,Byte] of Byte, но тогда функция потребует 16 мб памяти вместо 2.
Можно попробовать одномерный динамический массив цветов, памяти потребуется меньше, но будет намного медленнее.


 
Ricks ©   (2007-03-10 12:06) [2]

Спасибо, попробую!


 
SamBrook ©   (2007-03-10 12:53) [3]

В XnView есть соответствующая утилита


 
Сотрудник деканата   (2007-03-12 10:13) [4]

Неопримизированный вариант для TBitmap
http://kladovka.net.ru/delphibase/?action=viewfunc&topic=mediaimg&id=10173



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

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

Наверх




Память: 0.47 MB
Время: 0.034 c
2-1200392049
rys
2008-01-15 13:14
2008.02.17
как написать html редактор


3-1191485669
Ega23
2007-10-04 12:14
2008.02.17
TADODataSet.Post - не сохранять данные в БД


15-1200660668
Bless
2008-01-18 15:51
2008.02.17
Почему "тренЕр", но "тренИровка"


2-1201256486
Artem
2008-01-25 13:21
2008.02.17
Помогите разобраться с потоком


2-1201253023
Lexa11_2002
2008-01-25 12:23
2008.02.17
TCheckListBox