创建RGB、CMYK颜色分量圆代码
2009-03-22 12:28
471 查看
创建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 {两点间距平方};
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颜色圈内的横坐标
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颜色圈内的纵坐标
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
//蓝色分量为255
end
end
end
end ;
创建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颜色圈的点的横坐标
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颜色圈的点的纵坐标
RESULT := 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 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 //蓝色分量为0
end
end
end;
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 {两点间距平方};
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颜色圈内的横坐标
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颜色圈内的纵坐标
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
//蓝色分量为255
end
end
end
end ;
创建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颜色圈的点的横坐标
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颜色圈的点的纵坐标
RESULT := 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 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 //蓝色分量为0
end
end
end;
相关文章推荐
- Delphi,创建 RGB CMYK颜色分量圆 完整代码
- 将CMYK颜色值和RGB颜色相互转换的PHP代码
- 将CMYK颜色值和RGB颜色相互转换的PHP代码
- HSI、HSV、RGB、CMYK、HSL、HSB、Ycc、XYZ、Lab、YUV颜色模型的区别
- 网上流行护眼色的RGB值和颜色代码
- VB取各颜色分量,将RGB转为HTML颜色.
- HTML140种常用RGB颜色代码列表
- RGB颜色空间到HSV和YUV的转换关系(含VC代码)
- 网上流行护眼色的RGB值和颜色代码汇总
- 彩虹的七种颜色CMYK和RGB的值是什么
- HSV颜色到RGB的转换C++代码 直接可用
- 三原色光模式(RGB color model)的颜色融合,C#代码
- tabhost代码创建及样式颜色字体
- 识别CMYK无法打印的RGB颜色
- HSI、HSV、RGB、CMYK、HSL、HSB、Ycc、XYZ、Lab、YUV颜色模型的区别
- Android开发:setAlpha()方法和常用RGB颜色表----颜色, r g b分量数值(int), 16进制表示 一一对应
- 通过代码创建UILable,并设置平移旋转字体颜色等属性
- RGB颜色代码int值
- RGB颜色空间与Lab颜色空间区别与联系(附转换代码)
- RGB HSV CMYK LAB颜色空间