CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Delphi >  GAME,图形处理/多媒体

如何取当前颜色的反颜色/选中颜色?

楼主fou007(命运掌握在自己手中!)2005-06-01 18:20:39 在 Delphi / GAME,图形处理/多媒体 提问

比如在选中的区域画出文字,选中时的Brush.Color,字体颜色是Font.Color  
  当Brush.Color=Font.Color时,就显示不出字体了  
  我想实现的是,当Brush.Color=Font.Color时就把Font.Color用Brush.Color的选中颜色取代  
  Brush.Color和Font.Color都不是确定值  
  该如何做? 问题点数:10、回复次数:9Top

1 楼fou007(命运掌握在自己手中!)回复于 2005-06-02 12:52:14 得分 0

小奇唱到:没有人理我Top

2 楼jtg98g3(跳舞的青蛙)回复于 2005-06-02 17:00:58 得分 4

用按位取反运算试一试!  
  请问高手有没有处理过BMP图像的数据。  
  我在取的bmp的数据后。然后画出来。发现有个问题。就是在8位图像中需要对图像做垂直翻转才能显示正常。还有它的24位图像中。三个字节代表了三中颜色。那么三个字节跟三种颜色有什么对应关系。比如三个字节中第一个字节存放了那种颜色?第二个,第三个呢?Top

3 楼chijingde(AD)回复于 2005-06-02 17:22:50 得分 6

RGB各自的颜色分别用255去减Top

4 楼chijingde(AD)回复于 2005-06-02 17:31:48 得分 0

回楼上  
   
  1-3分别对应的蓝绿红好像  
   
  Top

5 楼jtg98g3(跳舞的青蛙)回复于 2005-06-02 21:57:55 得分 0

先些了!已经成功了。能显示24位的bmp数据了。我用的画笔是self.canvas.pixels[x,y]。  
  但是不能正常显示2,4位的bmp数据。是不是调色板出了问题?请看:  
   
  http://community.csdn.net/Expert/topic/4055/4055077.xml?temp=.1816065Top

6 楼jtg98g3(跳舞的青蛙)回复于 2005-06-02 21:58:26 得分 0

楼主,不好意思,借宝地一用哦!  
  Top

7 楼fou007(命运掌握在自己手中!)回复于 2005-06-14 16:15:02 得分 0

前几天有些忙  
  谢谢大家指点  
  我在网上搜索了一下有一个Color->RGB的函数:  
   
  function   TForm1.ChangeToRGB(Color:   TColor):   String;  
  var  
      R,G,B:integer;  
  begin  
      R   :=   Color   and   $ff;  
      G   :=   (Color   and   $ff00)   shr   8;  
      B   :=   (Color   and   $ff0000)   shr   16;  
      result:=show(R)+show(G)+show(B);  
  end;  
   
   
  procedure   TForm1.ColorBox1Change(Sender:   TObject);  
  begin  
      Panel1.Color   :=   ColorBox1.Selected   ;  
  end;  
   
  function   TForm1.show(X:   integer):   String;  
  var  
      a,b:integer;  
  begin  
      if   x<=15   then  
      result:='0'+showHex(x)  
      else  
      begin  
      a:=x   div   16;  
      b:=   (x   mod   16);  
      result:=showHex(a)+showHex(b);  
      end;  
  end;  
   
  function   TForm1.showHex(X:   integer):   String;  
  begin  
      if   x<10   then  
      result:=inttostr(x)  
      else   if   x=10   then  
      result:='A'  
      else   if   x=11   then  
      result:='B'  
      else   if   x=12   then  
      result:='C'  
      else   if   x=13   then  
      result:='D'  
      else   if   x=14   then  
      result:='E'  
      else   if   x=15   then  
      result:='F';  
  end;Top

8 楼fou007(命运掌握在自己手中!)回复于 2005-06-14 16:22:30 得分 0

我就用255去减去RGB各位再合起来  
  function   TForm1.ChangeColor(Color:   TColor):   String;  
  var  
      R,G,B:   integer;  
  begin  
      R   :=   255   -   (Color   and   $ff);  
      G   :=   255   -   ((Color   and   $ff00)   shr   8);  
      B   :=   255   -   ((Color   and   $ff0000)   shr   16);  
      result:=show(R)+show(G)+show(B);  
  end;  
   
  的确可以获得一个颜色值  
   
  然后我用Panel2.Color   :=   StringToColor(ChangeColor(Panel1.Color));  
   
  不过有时会报EConvertError  
  提示合成的值不是一个integer值  
   
  有高手给我指点一下么  
  是不是我这样取有问题  
  因为我得到的合法的颜色值感觉与原来的颜色值不搭旮Top

9 楼fou007(命运掌握在自己手中!)回复于 2005-06-14 16:24:00 得分 0

有过这方面经验的人进来帮忙看一下啊Top

相关问题

  • DataGrid选中一个单元格后,当前行颜色改变
  • 如何获取当前选中文本
  • 如何取得colorcombobox所选中的颜色直?要string型的!!
  • 如何将dw中当前选中行或字段缺省的蓝底白字改成其他颜色
  • 请问如何提取ListBox当前选中的行号?
  • 如何取到组合框中当前选中的字符串
  • 在JBUIDER中,如何取得JComboBox中当前选中的值
  • ComboBoxEx control如何取得当前被选中item的iIndent值?
  • cxGrid,dxDBGrid取得当前选中行对应数据问题
  • ole 日期控件,怎样取得当前选中日期值?

关键词

  • 图像
  • 数据
  • 颜色
  • 选中
  • color
  • brush
  • bmp
  • 显示
  • tform
  • show

得分解答快速导航

  • 帖主:fou007
  • jtg98g3
  • chijingde

相关链接

  • Delphi类图书
  • Delphi类源码下载
  • Delphi控件下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo