It does not make sense. The header is correct, and the generation of the color circle does not goes through a TColor type. So there is no inversion in LazPaint code. So I suppose the error is in the Lazarus code or Freepascal code. We can fix it in LazPaint by swapping Red/Blue without changing headers, we will obtain the right result, but it is a trick. If the Freepascal code is corrected, it will be swapped again. In the meantime, can you try this:
{$IFDEF DARWIN}
SwapRedBlue;
{$ENDIF}
RawImage.Description.Init_BPP32_B8G8R8_BIO_TTB(AWidth,AHeight);
RawImage.Description.LineOrder:= ALineOrder;
RawImage.Description.LineEnd := rileDWordBoundary;
RawImage.Data:= PByte(AData);
RawImage.DataSize:= AWidth*AHeight*Sizeof(TBGRAPixel);
CreateSuccess := RawImage_CreateBitmaps(RawImage, BitmapHandle, MaskHandle, false);
{$IFDEF DARWIN}
SwapRedBlue;
{$ENDIF}
Note: there is another problem with the background color. In uchoosecolor.pas, in the procedure FormCreate, there are two lines to determine the colors of the text and of the background :
FormBackgroundColor := ColorToBGRA(ColorToRGB(self.Color));
FormTextColor := ColorToBGRA(ColorToRGB(clWindowText));
It seems that this does not work on Mac. Can you try this instead?
FormBackgroundColor := ColorToBGRA(ColorToRGB(clBtnFace));
FormTextColor := ColorToBGRA(ColorToRGB(clWindowText));