Архив исходников программ, модулей и компонентов на Delphi


Начальная страница

Поиск по базе



Операционная система
Настройка приложения
Взаимодействия приложений
Файлы и директории
Строки и символы
Математика
Базы данных
Интернет и сеть
Мультимедиа
Аппаратная часть
VCL
Другие разделы [0]
 

Количество записей в базе - 537
Сегодня добавлено – 0

Изображения, рисование



Вернуться к списку функций
 Функция возвращает колличество уникальных цветов Bitmap

 Прислал: Fenik (Новоуральск) ( 1 июня 2002 г. )
©  Собственное написание (Николай федоровских)
 Зависимости:
Graphics

 Ограничения:
Проверено в D5, Windows Me

 Исходный текст:
{ **** UBPFD *********** by http://kladovka.net.ru/delphibase/ ****
>> Функция возвращает колличество уникальных цветов Bitmap

Зависимости: Graphics
Автор:       Fenik, chook_nu@uraltc.ru, Новоуральск
Copyright:   Собственное написание (Николай федоровских)
Дата:        1 июня 2002 г.
***************************************************************** }

function HowManyColors(Bitmap: TBitmap): Integer;
type
  TRGB = record
    B, G, R: Byte;
  end;
  pRGB = ^TRGB;
  
var i: Byte;
    x, y: Integer;
    Dest: pRGB;
    RGBArray: array [0..255, 0..255] of array of Byte;
begin
  Bitmap.PixelFormat := pf24Bit;
  Result := 0;
  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
      if RGBArray[r, g] <> nil then
        for i := 0 to High(RGBArray[r, g]) do begin
          //если такой цвет уже есть, то выходим из цыкла
          if RGBArray[r, g] [i] = b then Break;
          //если это последний круг цикла, то такого цвета нет
          if i = High(RGBArray[r, g]) then begin
            Inc(Result); //прибавляем один цвет
            SetLength(RGBArray[r, g], Length(RGBArray[r, g]) + 1);
            RGBArray[r, g] [High(RGBArray[r, g])] := b;
          end;
        end
      else begin
        Inc(Result);
        SetLength(RGBArray[r, g], 1);
        RGBArray[r, g] [0] := b;
      end;
      Inc(Dest);
    end;
  end;
end;

 Пример использования:
procedure TForm1.MMHowManyColorsClick(Sender: TObject);
var str: string;
begin
  Screen.Cursor := crHourGlass;
  try
    str := Format('Изображение содержит %d цветов.', [HowManyColors(FBitmap)]);
  finally
    Screen.Cursor := crDefault;
  end;
  Application.MessageBox(PChar(str), PChar(Application.Title), MB_OK);
end;


Вернуться к списку функций

Наверх ▲