创建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;

转载于:https://www.cnblogs.com/zxg1982/archive/2009/03/22/1418897.html

创建RGB、CMYK颜色分量圆代码相关推荐

  1. RGB CMYK颜色理解及性质(1)

    RGM模式 首次听到RGB,好似初中生物课上,现已忘记.再接触便是三年后,学的计算机,也是迷迷糊糊,不就是红绿蓝吗嘛,这有啥难的. 有的人就说了,为啥这三个在一起就变了样.红不是红,不是绿的- 图片是 ...

  2. cdr里怎么看html颜色代码大全,CDR中查看是RGB还是CMYK颜色的三种方法

    使用CorelDRAW作出的文件在印刷的时候,要做印前检查,区别颜色模式,以保证能正常印刷效果.那么如何查看一个设计文件是RGB还是CMYK颜色,文本将介绍三种方法以做详细说明. 方法一:查找和替换 ...

  3. cdr里怎么看html颜色代码大全,CDR中怎么查看一个设计文件是RGB还是CMYK颜色-CDR颜色模式查看方法_好特教程...

    使用CorelDRAW作出的文件在印刷的时候,要做印前检查,区别颜色模式,以保证能正常印刷效果.那么如何查看一个设计文件是RGB还是CMYK颜色,文本将介绍三种方法以做详细说明. 方法一:查找和替换 ...

  4. 使用Opencv获取每个像素点的RGB颜色分量/HSV颜色分量

    一.  所需结构体 CvScalar 结构体介绍 typedef struct CvScalar { double val[4]; //BGRA}CvScalar; 二. 所需函数 cvGet2D 函 ...

  5. php生成cmyk图片,用ImageMagick创建cmyk颜色的图片,在photoshop中显示的cmyk值不一样!...

    各位好!我在php里用ImageMagick创建cmyk颜色的图片,在photoshop中显示的cmyk值不一样!比如:在ImageMagick通过ImagickPixel设置的颜色为cmyk(0,0 ...

  6. RGB,CMYK,HSB各种颜色表示的转换

    一.表示颜色的方式有很多种,如RGB,CMYK,HSB,Hex等等 1.RGB:这种表示颜色由三原色构成,通过红,绿,蓝三种颜色分量的不同,组合成不同的颜色,例如,100%红+100%绿混合可以得到黄 ...

  7. opencv4 c++ RGB颜色模式和CMYK颜色模式的相互转化

    CMYK转RGB 今天看了一位大佬rgb转cmyk颜色模式的文章.但是我发现网上没有什么cmyk转rgb颜色模式的代码.我就根据大佬的代码写了一个.思路就是把大佬的代码逆向转换一下. rgb转cmyk ...

  8. [html] HTML采用的是RGB颜色还是CMYK颜色?为什么?

    [html] HTML采用的是RGB颜色还是CMYK颜色?为什么? 用在电脑或者手机上显示的大部分都是RGB,用于需要印刷的都用CMYK 并且不同的显示器色域不同会导致色差,不同浏览器也有自己的调色板 ...

  9. cdr 颜色的html怎么查,CDR中如何查看是RGB还是CMYK颜色

    原标题:CDR中如何查看是RGB还是CMYK颜色 使用作出的文件在印刷的时候,要做印前检查,区别颜色模式,以保证能正常印刷效果.那么如何查看一个设计文件是RGB还是CMYK颜色,文本将介绍三种方法以做 ...

最新文章

  1. 2021世界人工智能大会最高奖项——卓越人工智能引领者奖(Super AI Leader,简称SAIL奖)在大会开幕式揭晓...
  2. [ZJOI2007]棋盘制作 报表统计 矩阵游戏 时态同步
  3. UA OPTI544 量子光学13 场的量子化描述
  4. MyBatis 源码分析 - 映射文件解析过程
  5. 两大主流Web服务器之分析与对比
  6. [react] 状态管理器解决了什么问题?什么时候用状态管理器?
  7. u盘启动 联想一体机_联想笔记本电脑怎么重装win10系统
  8. 计算机科学专业必读的44册经典著作
  9. 大家马致远是哪个朝代的,马致远作品赏析
  10. Android下异步扫描视频文件缩略图
  11. php视频弹幕,php超仿bilbili播放器带弹幕库后台管理系统
  12. autojs今日头条急速脚本
  13. python根据服务器sn号查询DELL服务器型号、出厂时间、过保时间
  14. VOA special English 下载 py
  15. 国产linux系统 深度6,国产Linux系统深度Deepin体验
  16. swper_swipe和swiper的区别
  17. 第一周学习前端html的知识总结与感悟
  18. makefile编写helloworld
  19. 手写数字识别画板前后端实现 | Flask+深度神经网络
  20. 基础地图-在线地图-天地图(无标注)

热门文章

  1. Qt4.7.0添加自定义键盘(转载+部分自己的实际工程实验)
  2. html visibility 替代服务器端控件 visable属性!
  3. kafka 消息服务
  4. 《Python数据科学实践指南》——0.2节如何成为数据科学家
  5. 原文:我的数据库学习“曲线”
  6. Android开发(五)——计时器
  7. [转]Laravel 4之URL生成
  8. [PLL][PM]锁相环模拟相位解调
  9. 面试题:利用一个栈倒序另外一个栈中的数
  10. Struts2配置文件详解