1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
| function CreateCMYCircles(const size: integer; const Cflag, Mflag, Yflag: boolean): tBGRABitmap;
var
adjustedSize : integer;
border : integer;
i, iC,iM,iY : INTEGER;
j, jC,jM,jY : INTEGER;
jOffset : integer;
radiusSquared: integer;
row : pBGRAPixel;//pRGBTripleArray;
begin
border := MulDiv(size, 5, 1000);
adjustedSize := size - 2 * border;
radiusSquared := Sqr( MulDiv(adjustedSize, 2,6) );
iC := border + MulDiv(adjustedSize, 2, 6);
iM := border + MulDiv(adjustedSize, 3, 6);
iY := border + MulDiv(adjustedSize, 4, 6);
jOffset := Round(adjustedSize * (2 - Sqrt(3))/12);
jC := jOffset + border + Round(adjustedSize * (2 + Sqrt(3)) / 6);
jM := jOffset + border + MulDiv(adjustedSize, 2, 6);
jY := jC;
result := tBGRABitmap.Create(size, size);//TBitmap.Create;
//result.Width := size;
//result.Height := size;
//result.PixelFormat := pf24bit;
result.Canvas.Brush.Color := RGB(255,255,255); // white
result.Canvas.FillRect(result.Canvas.ClipRect);
for j := 0 to result.Height-1 do
begin
row := result.Scanline[j];
for i := 0 to result.Width-1 do
begin
with row[i] do
begin
if Cflag and (DistanceSquared(i,j, iC,jC) < radiusSquared) then red := 0;
if MFlag and (DistanceSquared(i,j, iM,jM) < radiusSquared) then Green := 0;
if YFlag and (DistanceSquared(i,j, iY,jY) < radiusSquared) then Blue := 0
end
end
end
end; |
Partager