![]() |
![]() ![]() ![]() ![]() |
|
Функция возвращает колличество уникальных цветов BitmapDelphi , Графика и Игры , Bitmap
Автор: Fenik
{ **** UBPFD *********** by delphibase.endimus.com ****
>>
Зависимости: 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;
Программная функция Delphi, возвращающая количество уникальных цветов в заданном объекте Разбивка кода:
Пример использования в конце показывает, как использовать эту функцию в обработчике события формы ( Некоторые предложения по улучшению:
В целом, это прямолинейное реализация общего задания обработки изображений. С некоторыми минорными улучшениями она может стать еще более эффективной и поддерживаемой. Функция возвращает количество уникальных цветов Bitmap, перебирая каждый пиксель изображения и храня цвета в массиве для отслеживания дубликатов. Комментарии и вопросыПолучайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш
|
||||
©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007 | ||||