![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Обратная функцыя к RGB() существует? [Delphi, Windows]
lubass © (2007-10-22 20:25:00)Как мне достать значения цветов (красного, зеленого и синего) из цвета?
homm (2007-10-23 19:19:00) [21]> [7] rts111 © (23.10.07 12:37)
> А чем тебе мой вариант не нравится, там бообще обращение
> напрямую к значению без shr.
procedure SwapChanels(BMP: TBitmap);
type
ADWORD = array [0..0] of DWORD;
var
i, j: Integer;
Pix: DWORD;
Line: ^ADWORD;
begin
for i := 0 to BMP.Height-1 do begin
Line := BMP.ScanLine[i];
for j := 0 to BMP.Width-1 do begin
Pix := Line[j];
//Line[j] := GetBValue(Pix) + (GetGValue(Pix) shl 8) + (GetRValue(Pix) shl 16); // 1200 mSec
//Line[j] := byte(Pix shr 16) + (byte(Pix shr 8) shl 8) + (byte(Pix) shl 16); // 300 mSec
//Line[j] := TRGBQuad(Pix).rgbRed + (TRGBQuad(Pix).rgbGreen shl 8) + (TRGBQuad(Pix).rgbBlue shl 16); //650 mSec
TRGBQuad(Line[j]).rgbBlue := TRGBQuad(Pix).rgbRed; // 610 mSec
TRGBQuad(Line[j]).rgbGreen := TRGBQuad(Pix).rgbGreen;
TRGBQuad(Line[j]).rgbRed := TRGBQuad(Pix).rgbBlue;
end;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
type
ADWORD = array [0..0] of DWORD;
var
i, T: Integer;
begin
Image1.Picture.Bitmap := TBitmap.Create;
Image1.Picture.Bitmap.LoadFromFile('C:\1.bmp');
Image1.Picture.Bitmap.PixelFormat := pf32bit;
T := GetTickCount;
for i := 0 to 98 do
SwapChanels(Image1.Picture.Bitmap);
ShowMessage(IntToStr(GetTickCount-T));
end;
@!!ex (2007-10-23 18:03:00) [22]> [7] rts111 © (23.10.07 12:37)
Ну хотя бы потому, что придется приведение типов использовать при переходе TColor<->TColor4b.
а так... конечно лучший вариант. С ним лично я и работаю. Только не с WinAPI, а с OpenGL, там так удобнее.
rts111 (2007-10-23 14:35:00) [23]
> antonn © (23.10.07 13:42) [8]
>
> > А чем тебе мой вариант не нравится, там бообще обращение
>
> > напрямую к значению без shr.
>
> без shr написано, или без shr откомпилируется?
Именно без shr откомпилируется.
antonn (2007-10-23 13:42:00) [24]
> А чем тебе мой вариант не нравится, там бообще обращение
> напрямую к значению без shr.
без shr написано, или без shr откомпилируется?
rts111 (2007-10-23 12:37:00) [25]
> @!!ex © (23.10.07 11:40) [6]
А чем тебе мой вариант не нравится, там бообще обращение напрямую к значению без shr.
Правка:
TColor4b = record
r,g,b,a :byte;
end;
@!!ex (2007-10-23 11:40:00) [26]> [3] lubass © (22.10.07 20:38)
варианты [1] и [2] - идеентичны. Но я бы предпочел первый, поскольку нет лишнего вызова процедур.
rts111 (2007-10-22 23:21:00) [27]type
TColor4b = record
r,g,b,a :byte;
...
var
color: TColor;
r: byte;
...
begin
...
r := TColor4b (color).r;
...
end;
antonn (2007-10-22 20:40:00) [28]дежавю? :)
lubass (2007-10-22 20:38:00) [29]Спосибо
homm (2007-10-22 20:32:00) [30]
var
r,g,b: byte;
color: TColor;
begin
r := byte(color);
g := byte(color shr 8);
b := byte(color shr 16);
end;
Pa5ha (2007-10-22 20:32:00) [31]function GetRValue(color: tcolor): byte;
и т.д.