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