日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

创建RGB、CMYK颜色分量圆代码

發(fā)布時(shí)間:2024/4/15 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 创建RGB、CMYK颜色分量圆代码 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

創(chuàng)建RGB分量

function CreateRGBCircles(const size: INTEGER;
?? const Rflag, Gflag, Bflag: BOOLEAN): TBitmap;
var
?? AdjustedSize: INTEGER;
?? Border: INTEGER;
?? i, iR, iG, iB: INTEGER;
?? j, jR, jG, jB: INTEGER;
?? jOffset: INTEGER;
?? RadiusSquared: INTEGER;
?? row: pRGBTripleArray;

?? function DistanceSquared(const x1, y1, x2, y2: INTEGER): INTEGER;
?? begin
????? RESULT := SQR(x1 - x2) + SQR(y1 - y2)
?? end {兩點(diǎn)間距平方};

begin
?? Border := MulDiv(size, 5, 1000);

?? AdjustedSize := size - 2 * Border;

?? RadiusSquared := SQR(MulDiv(AdjustedSize, 2, 6));

?? iR := Border + MulDiv(AdjustedSize, 2, 6);
?? iG := Border + MulDiv(AdjustedSize, 3, 6);
?? iB := Border + MulDiv(AdjustedSize, 4, 6);
?? //RGB顏色圈內(nèi)的橫坐標(biāo)
?? jOffset := ROUND(AdjustedSize * (2 - SQRT(3)) / 12);
?? jR := jOffset + Border + Round(AdjustedSize * (2 + SQRT(3)) / 6);
?? jG := jOffset + Border + MulDiv(AdjustedSize, 2, 6);
?? jB := jR;
?? //RGB顏色圈內(nèi)的縱坐標(biāo)
?? RESULT := TBitmap.Create;
?? //輸出位圖
?? RESULT.Width := size;
?? RESULT.Height := size;
?? RESULT.PixelFormat := pf24bit;
?? RESULT.Canvas.Brush.Color := RGB(0, 0, 0);
?? // 黑色背景
?? 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 Rflag and (DistanceSquared(i, j, iR, jR) < RadiusSquared)
??????????????????????? then rgbtRed := 255;
???????????????????? //紅色分量為255
???????????????????? if GFlag and (DistanceSquared(i, j, iG, jG) < RadiusSquared)
??????????????????????? then rgbtGreen := 255;
???????????????????? //綠色分量為255
???????????????????? if BFlag and (DistanceSquared(i, j, iB, jB) < RadiusSquared)
??????????????????????? then rgbtBlue := 255
??????????????????????? //藍(lán)色分量為255
????????????????? end
??????????? end

????? end
end ;

?

創(chuàng)建CMYK分量

function CreateCMYCircles(const size: INTEGER;
?? const Cflag, Mflag, Yflag: BOOLEAN): TBitmap;
var
?? AdjustedSize: INTEGER;
?? Border: INTEGER;
?? i, iC, iM, iY: INTEGER;
?? j, jC, jM, jY: INTEGER;
?? jOffset: INTEGER;
?? RadiusSquared: INTEGER;
?? row: pRGBTripleArray;

?? function DistanceSquared(const x1, y1, x2, y2: INTEGER): INTEGER;
?? begin
????? RESULT := SQR(x1 - x2) + SQR(y1 - y2)
?? end;

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);
?? //CMY顏色圈的點(diǎn)的橫坐標(biāo)
?? 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;
?? //CMY顏色圈的點(diǎn)的縱坐標(biāo)
?? RESULT := TBitmap.Create;
?? RESULT.Width := size;
?? RESULT.Height := size;
?? RESULT.PixelFormat := pf24bit;
?? //創(chuàng)建輸出位圖
?? 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 rgbtRed := 0;
???????????????????? //紅色分量為0
???????????????????? if MFlag and (DistanceSquared(i, j, iM, jM) < RadiusSquared)
??????????????????????? then rgbtGreen := 0;
???????????????????? //綠色分量為0
???????????????????? if YFlag and (DistanceSquared(i, j, iY, jY) < RadiusSquared)
??????????????????????? then rgbtBlue := 0;
????????????????? end //藍(lán)色分量為0
??????????? end

????? end
end;

轉(zhuǎn)載于:https://www.cnblogs.com/zxg1982/archive/2009/03/22/1418897.html

總結(jié)

以上是生活随笔為你收集整理的创建RGB、CMYK颜色分量圆代码的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。