source: trunk/Packages/FastGraphics/ColorFormats/UColorRGB8.pas

Last change on this file was 39, checked in by chronos, 6 years ago
  • Added: Mirror, Flip, Gradient, Negative for 4-bit gray image.
File size: 5.5 KB
Line 
1unit UColorRGB8;
2
3{$mode delphi}
4
5interface
6
7uses
8 Classes, SysUtils, UGGraphics, UFGraphics, Graphics;
9
10type
11 { TColorFormatRGB8 }
12
13 TColorFormatRGB8 = class(TColorFormat)
14 constructor Create; override;
15 end;
16
17 { TColorRGB8 }
18
19 TColorRGB8 = record
20 R: Byte;
21 B: Byte;
22 G: Byte;
23 function Create(R, G, B: Byte): TColorRGB8;
24 end;
25
26 { TPixmapRGB8 }
27
28 TPixmapRGB8 = class(TGPixmap<TColorRGB8>)
29 function RGB8ToColor(Value: TColorRGB8): TColor;
30 function ColorToRGB8(Value: TColor): TColorRGB8;
31 end;
32
33 { TBColorRGB8 }
34
35 TBColorRGB8 = class(TBColor)
36 Value: TColorRGB8;
37 constructor Create(Color: TColorRGB8);
38 procedure SetColorName(ColorName: TColorName); override;
39 procedure SetColor(Color: TColor); override;
40 procedure SetRandom; override;
41 end;
42
43 { TBPixmapRGB8 }
44
45 TBPixmapRGB8 = class(TBPixmap)
46 private
47 FillCallBack: TGetColorPos;
48 function FillGetColor(Position: TPoint): TColorRGB8;
49 function NegativeFunc(Position: TPoint): TColorRGB8;
50 protected
51 function GetPixel(X, Y: Integer): IBColor; override;
52 procedure SetPixel(X, Y: Integer; AValue: IBColor); override;
53 procedure SetSize(AValue: TPoint); override;
54 public
55 Pixmap: TPixmapRGB8;
56 procedure Mirror; override;
57 procedure Flip; override;
58 procedure Negative; override;
59 procedure Fill(Color: IBColor); override;
60 procedure Fill(Func: TGetColorPos); override;
61 procedure Line(P1, P2: TPoint; Color: IBColor); override;
62 procedure PaintToCanvas(Canvas: TCanvas); override;
63 procedure PaintToCanvas(Canvas: TCanvas; Rect: TRect); override;
64 procedure PaintToBitmap(Bitmap: TBitmap; Rect: TRect); override;
65 procedure LoadFromCanvas(Canvas: TCanvas); override;
66 procedure LoadFromBitmap(Bitmap: TBitmap); override;
67 function GetDataSize: Integer; override;
68 constructor Create; override;
69 destructor Destroy; override;
70 end;
71
72
73
74implementation
75
76{ TColorFormatRGB8 }
77
78constructor TColorFormatRGB8.Create;
79begin
80 inherited;
81 BitDepth := 24;
82 Name := 'RGB8';
83 BackendPixmapClass := TBPixmapRGB8;
84 BackendColorClass := TBColorRGB8;
85 AddChannel('Red', 0, 8);
86 AddChannel('Green', 8, 8);
87 AddChannel('Blue', 16, 8);
88end;
89
90{ TColorRGB8 }
91
92function TColorRGB8.Create(R, G, B: Byte): TColorRGB8;
93begin
94 Result.R := R;
95 Result.G := G;
96 Result.B := B;
97end;
98
99{ TPixmapRGB8 }
100
101function TPixmapRGB8.RGB8ToColor(Value: TColorRGB8): TColor;
102begin
103 Result := (Value.R shl 16) or (Value.G shl 8) or (Value.B shl 0);
104end;
105
106function TPixmapRGB8.ColorToRGB8(Value: TColor): TColorRGB8;
107begin
108 Result.R := (Value shr 16) and $ff;
109 Result.G := (Value shr 8) and $ff;
110 Result.B := (Value shr 0) and $ff;
111end;
112
113{ TBColorRGB8 }
114
115constructor TBColorRGB8.Create(Color: TColorRGB8);
116begin
117 Value := Color;
118end;
119
120procedure TBColorRGB8.SetColorName(ColorName: TColorName);
121begin
122 case ColorName of
123 cnBlack: Value := TColorRGB8.Create(0, 0, 0);
124 cnGray: Value := TColorRGB8.Create($80, $80, $80);
125 cnSilver: Value := TColorRGB8.Create($C0, $C0, $C0);
126 cnWhite: Value := TColorRGB8.Create($ff, $ff, $ff);
127 else Value := TColorRGB8.Create(0, 0, 0);;
128 end;
129end;
130
131procedure TBColorRGB8.SetColor(Color: TColor);
132begin
133 Value := TColorRGB8.Create((Color shr 0) and $ff, (Color shr 8) and $ff, (Color shr 16) and $ff);
134end;
135
136procedure TBColorRGB8.SetRandom;
137begin
138 Value := TColorRGB8.Create(Random(256), Random(256), Random(256));
139end;
140
141{ TBPixmapRGB8 }
142
143function TBPixmapRGB8.FillGetColor(Position: TPoint): TColorRGB8;
144begin
145 Result := (FillCallBack(Position) as TBColorRGB8).Value;
146end;
147
148function TBPixmapRGB8.NegativeFunc(Position: TPoint): TColorRGB8;
149var
150 C: TColorRGB8;
151begin
152 C := Pixmap.Pixels[Position.X, Position.Y];
153 Result.R := 255 - C.R;
154 Result.G := 255 - C.G;
155 Result.B := 255 - C.B;
156end;
157
158function TBPixmapRGB8.GetPixel(X, Y: Integer): IBColor;
159begin
160 Result := TBColorRGB8.Create(Pixmap.Pixels[X, Y]);
161end;
162
163procedure TBPixmapRGB8.SetPixel(X, Y: Integer; AValue: IBColor);
164begin
165 Pixmap.Pixels[X, Y] := (AValue as TBColorRGB8).Value;
166end;
167
168procedure TBPixmapRGB8.SetSize(AValue: TPoint);
169begin
170 inherited;
171 Pixmap.Size := AValue;
172end;
173
174procedure TBPixmapRGB8.Mirror;
175begin
176 Pixmap.Mirror;
177end;
178
179procedure TBPixmapRGB8.Flip;
180begin
181 Pixmap.Flip;
182end;
183
184procedure TBPixmapRGB8.Negative;
185begin
186 Pixmap.Fill(NegativeFunc);
187end;
188
189procedure TBPixmapRGB8.Fill(Color: IBColor);
190begin
191 if Color is TBColorRGB8 then
192 Pixmap.Fill((Color as TBColorRGB8).Value);
193end;
194
195procedure TBPixmapRGB8.Fill(Func: TGetColorPos);
196begin
197 FillCallBack := Func;
198 Pixmap.Fill(FillGetColor);
199end;
200
201procedure TBPixmapRGB8.Line(P1, P2: TPoint; Color: IBColor);
202begin
203 Pixmap.Canvas.Pen.Color := (Color as TBColorRGB8).Value;
204 Pixmap.Canvas.Pen.MoveTo(P1);
205 Pixmap.Canvas.Pen.LineTo(P2);
206end;
207
208procedure TBPixmapRGB8.PaintToCanvas(Canvas: TCanvas);
209begin
210 Pixmap.PaintToCanvas(Canvas, Pixmap.RGB8ToColor);
211end;
212
213procedure TBPixmapRGB8.PaintToCanvas(Canvas: TCanvas; Rect: TRect);
214begin
215 Pixmap.PaintToCanvas(Canvas, Rect, Pixmap.RGB8ToColor);
216end;
217
218procedure TBPixmapRGB8.PaintToBitmap(Bitmap: TBitmap; Rect: TRect);
219begin
220 Pixmap.PaintToBitmap(Bitmap, Rect, Pixmap.RGB8ToColor);
221end;
222
223procedure TBPixmapRGB8.LoadFromCanvas(Canvas: TCanvas);
224begin
225 Pixmap.LoadFromCanvas(Canvas, Pixmap.ColorToRGB8);
226end;
227
228procedure TBPixmapRGB8.LoadFromBitmap(Bitmap: TBitmap);
229begin
230 Pixmap.LoadFromBitmap(Bitmap, Pixmap.ColorToRGB8);
231end;
232
233function TBPixmapRGB8.GetDataSize: Integer;
234begin
235 Result := Pixmap.GetDataSize;
236end;
237
238constructor TBPixmapRGB8.Create;
239begin
240 Pixmap := TPixmapRGB8.Create;
241end;
242
243destructor TBPixmapRGB8.Destroy;
244begin
245 FreeAndNil(Pixmap);
246 inherited Destroy;
247end;
248
249
250end.
251
Note: See TracBrowser for help on using the repository browser.