Форум: "Media";
Текущий архив: 2008.02.17;
Скачать: [xml.tar.bz2];
ВнизКоличество уникальных цветов в изображении Найти похожие ветки
← →
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 вся ветка
Форум: "Media";
Текущий архив: 2008.02.17;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.053 c