Hi!
What might help is my procedure FillNaturalColor.
As parameter you need the destination BGRAbitmap, a rectangle and the
Hue-Value reduced to a byte: round (360/Hue360 * 255)
The procedure produces a noisy natural area with your hue.
You can experiment with the 5 const values, but take care that you dont't get a byte underflow or overflow. Now the const values take care of that.
The hue value of sand is around 55. If the result is too dark or bright you must do that on your own.
// fill with noisy color Hue
procedure FillNaturalColor (Dest: TBGRABitmap; R : TRect; Hue: byte);
const RangeHue = 8;
RangeLight = 58;
RangeSat = 95;
BaseLight = 113;
BaseSat = 157;
var x,y : Integer;
h,l,s : byte;
col : TBGRAPixel;
begin
For y := R.Top to R.Bottom-1 do
begin
for x := R.left to R.Right - 1 do
begin
h := byte(Hue + Random(RangeHue +1));
l := BaseLight + Random (RangeLight+1);
s := BaseSat+ Random (RangeSat+1);
col := HSLAToBGRA(HSLA(h*256,s*256,l*256));
dest.setPixel(x,y,col);
end; //x
end; // y
end;
Example in the attachment.
Winni