Замена всех цветов на оттенки одногоDelphi , Графика и Игры , BitmapЗамена всех цветов на оттенки одного
Автор: Fenik { **** UBPFD *********** by delphibase.endimus.com **** >> Замена всех цветов на оттенки одного Зависимости: Graphics Автор: Fenik, chook_nu@uraltc.ru, Новоуральск Copyright: Собственное написание (Николай федоровских) Дата: 1 июня 2002 г. ***************************************************** } procedure ModColors(Bitmap: TBitmap; Color: TColor); function GetR(const Color: TColor): Byte; //извлечение красного begin Result := Lo(Color); end; function GetG(const Color: TColor): Byte; //извлечение зелёного begin Result := Lo(Color shr 8); end; function GetB(const Color: TColor): Byte; //извлечение синего begin Result := Lo((Color shr 8) shr 8); end; function BLimit(B: Integer): Byte; begin if B < 0 then Result := 0 else if B > 255 then Result := 255 else Result := B; end; type TRGB = record B, G, R: Byte; end; pRGB = ^TRGB; var r1, g1, b1: Byte; x, y: Integer; Dest: pRGB; A: Double; begin Bitmap.PixelFormat := pf24Bit; r1 := Round(255 / 100 * GetR(Color)); g1 := Round(255 / 100 * GetG(Color)); b1 := Round(255 / 100 * GetB(Color)); 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 begin A := (r + b + g) / 300; with Dest^ do begin R := BLimit(Round(r1 * A)); G := BLimit(Round(g1 * A)); B := BLimit(Round(b1 * A)); end; end; Inc(Dest); end; end; end; Пример использования: ModColors(FBitmap, RGB(218, 219, 230)); Текст программы на Delphi: Процедура ModColors (Bitmap: TBitmap; Color: TColor); var r, g, b: Byte; x, y: Integer; Dest: pRGB; begin Bitmap.PixelFormat := pf24Bit; r := Lo(Color); g := Lo((Color shr 8)); b := Lo((Color shr 16)); 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 begin R := BLimit(Round(r)); G := BLimit(Round(g)); B := BLimit(Round(b)); end; Inc(Dest); end; end; end; Пример использования: FBitmap := TBitmap.Create; try FBitmap.Width := 100; FBitmap.Height := 100; ModColors(FBitmap, RGB(218, 219, 230)); finally FreeAndNil(FBitmap); end; В статье описывается процедура ModColors, которая заменяет все цвета в битмапе на оттенки одного выбранного цвета, изменяя интенсивность компонентов RGB в зависимости от альфа-канала. Комментарии и вопросыПолучайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.
|
||||
©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007 |