Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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.045 c
15-1200497600
_Shuler_
2008-01-16 18:33
2008.02.17
Language_default


8-1170185135
johnvp
2007-01-30 22:25
2008.02.17
Как выдать звук накаждый моно-канал отдельно?


2-1200923194
zeroed
2008-01-21 16:46
2008.02.17
Распарсить строку


2-1201508491
HITMAN
2008-01-28 11:21
2008.02.17
Работа с таблицей (баз данных)


2-1201457736
mahab
2008-01-27 21:15
2008.02.17
Запись дисков





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский