source: trunk/Packages/FastGraphics/ColorFormats/UColorGray2.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: 4.4 KB
Line 
1unit UColorGray2;
2
3{$mode delphi}
4
5interface
6
7uses
8 Classes, SysUtils, Graphics, UGGraphics, UFGraphics;
9
10type
11 { TColorFormatGray2 }
12
13 TColorFormatGray2 = class(TColorFormat)
14 constructor Create; override;
15 end;
16
17 TColorGray2 = Byte;
18
19 { TPixmapGray2 }
20
21 TPixmapGray2 = class(TGPixmapBit<TColorGray2>)
22 function Gray2ToColor(Value: TColorGray2): TColor;
23 function ColorToGray2(Value: TColor): TColorGray2;
24 end;
25
26 { TBColorGray2 }
27
28 TBColorGray2 = class(TBColor)
29 Value: TColorGray2;
30 constructor Create(Color: TColorGray2);
31 procedure SetColorName(ColorName: TColorName); override;
32 procedure SetRandom; override;
33 end;
34
35 { TBPixmapGray2 }
36
37 TBPixmapGray2 = class(TBPixmap)
38 private
39 FillCallBack: TGetColorPos;
40 function FillGetColor(Position: TPoint): TColorGray2;
41 protected
42 procedure SetSize(AValue: TPoint); override;
43 function GetPixel(X, Y: Integer): IBColor; override;
44 procedure SetPixel(X, Y: Integer; AValue: IBColor); override;
45 public
46 Pixmap: TPixmapGray2;
47 procedure Fill(Color: IBColor); override;
48 procedure Fill(Func: TGetColorPos); override;
49 procedure Line(P1, P2: TPoint; Color: IBColor); override;
50 procedure PaintToCanvas(Canvas: TCanvas); override;
51 procedure PaintToCanvas(Canvas: TCanvas; Rect: TRect); override;
52 procedure PaintToBitmap(Bitmap: TBitmap; Rect: TRect); override;
53 procedure LoadFromCanvas(Canvas: TCanvas); override;
54 procedure LoadFromBitmap(Bitmap: TBitmap); override;
55 function GetDataSize: Integer; override;
56 constructor Create; override;
57 destructor Destroy; override;
58 end;
59
60
61
62
63implementation
64
65{ TColorFormatGray2 }
66
67constructor TColorFormatGray2.Create;
68begin
69 inherited;
70 Name := 'Gray 2-bit';
71 BitDepth := 2;
72 BackendColorClass := TBColorGray2;
73 BackendPixmapClass := TBPixmapGray2;
74 AddChannel('Gray', 0, 2);
75end;
76
77{ TBColorGray2 }
78
79constructor TBColorGray2.Create(Color: TColorGray2);
80begin
81 Value := Color;
82end;
83
84procedure TBColorGray2.SetColorName(ColorName: TColorName);
85begin
86 case ColorName of
87 cnBlack: Value := 0;
88 cnGray: Value := 1;
89 cnSilver: Value := 2;
90 cnWhite: Value := 3;
91 else Value := 0;
92 end;
93end;
94
95procedure TBColorGray2.SetRandom;
96begin
97 Value := Random(4);
98end;
99
100{ TBPixmapGray2 }
101
102function TBPixmapGray2.FillGetColor(Position: TPoint): TColorGray2;
103begin
104 Result := (FillCallBack(Position) as TBColorGray2).Value;
105end;
106
107procedure TBPixmapGray2.SetSize(AValue: TPoint);
108begin
109 inherited;
110 Pixmap.Size := AValue;
111end;
112
113function TBPixmapGray2.GetPixel(X, Y: Integer): IBColor;
114begin
115 Result := TBColorGray2.Create(Pixmap.Pixels[X, Y]);
116end;
117
118procedure TBPixmapGray2.SetPixel(X, Y: Integer; AValue: IBColor);
119begin
120 Pixmap.Pixels[X, Y] := (AValue as TBColorGray2).Value;
121end;
122
123procedure TBPixmapGray2.Fill(Color: IBColor);
124begin
125 if Color is TBColorGray2 then
126 Pixmap.Fill((Color as TBColorGray2).Value);
127end;
128
129procedure TBPixmapGray2.Fill(Func: TGetColorPos);
130begin
131 FillCallBack := Func;
132 Pixmap.Fill(FillGetColor);
133end;
134
135procedure TBPixmapGray2.Line(P1, P2: TPoint; Color: IBColor);
136begin
137 Pixmap.Canvas.Pen.Color := (Color as TBColorGray2).Value;
138 Pixmap.Canvas.Pen.MoveTo(P1);
139 Pixmap.Canvas.Pen.LineTo(P2);
140end;
141
142procedure TBPixmapGray2.PaintToCanvas(Canvas: TCanvas);
143begin
144 Pixmap.PaintToCanvas(Canvas, Pixmap.Gray2ToColor);
145end;
146
147procedure TBPixmapGray2.PaintToCanvas(Canvas: TCanvas; Rect: TRect);
148begin
149 Pixmap.PaintToCanvas(Canvas, Rect, Pixmap.Gray2ToColor);
150end;
151
152procedure TBPixmapGray2.PaintToBitmap(Bitmap: TBitmap; Rect: TRect);
153begin
154 Pixmap.PaintToBitmap(Bitmap, Rect, Pixmap.Gray2ToColor);
155end;
156
157procedure TBPixmapGray2.LoadFromCanvas(Canvas: TCanvas);
158begin
159 Pixmap.LoadFromCanvas(Canvas, Pixmap.ColorToGray2);
160end;
161
162procedure TBPixmapGray2.LoadFromBitmap(Bitmap: TBitmap);
163begin
164 Pixmap.LoadFromBitmap(Bitmap, Pixmap.ColorToGray2);
165end;
166
167function TBPixmapGray2.GetDataSize: Integer;
168begin
169 Result := Pixmap.GetDataSize;
170end;
171
172constructor TBPixmapGray2.Create;
173begin
174 Pixmap := TPixmapGray2.Create;
175 Pixmap.BitsPerPixel := 2;
176end;
177
178destructor TBPixmapGray2.Destroy;
179begin
180 FreeAndNil(Pixmap);
181 inherited;
182end;
183
184{ TPixmapGray2 }
185
186function TPixmapGray2.Gray2ToColor(Value: TColorGray2): TColor;
187begin
188 Value := (Value and $3) * (255 div (4 - 1));
189 Result := (Value shl 16) or (Value shl 8) or (Value shl 0);
190end;
191
192function TPixmapGray2.ColorToGray2(Value: TColor): TColorGray2;
193begin
194 Result := Trunc((((Value shr 16) and $ff) + ((Value shr 8) and $ff) + ((Value shr 0) and $ff)) / $300 * 4);
195end;
196
197
198end.
199
Note: See TracBrowser for help on using the repository browser.