关于颜色转换的问题(120分)

  • 主题发起人 主题发起人 anson60
  • 开始时间 开始时间
A

anson60

Unregistered / Unconfirmed
GUEST, unregistred user!
颜色索引不变,改变颜色
比如1是红,2是绿,改成1绿2红
或者是搞一个R G B选择进度条
只要拖拉上面进度条改变颜色但是颜色索引不变
这样需要怎么处理?
分不够另再加
 
什么颜色阿?不懂,说明白点
 
颜色指已经画到画布上的颜色
由画笔画出
 
重新生成颜色吗?
newColor := RGB(r,g,b);
 
楼主说的是调色板的索引吧?

建议你统一做一个函数转换你界面上所有的Color。
 
LS说的不错
有这种想法
但没思路,见过一个画图CAD有R G B三个进度条
拖动直接改变颜色
想改成那样,如果不行就改成颜色转换,统一把一种颜色转换成另一种颜色
能给点思路吗?
 
类似的问题吧!呵呵
RGB运算
比如白 R=255 G=255 B=255
反色运算 RGB分别为 255-R 255-G 255-B
那么得到黑色 R=0 G=0 B=0
又若 绿色 R=0 G=255 B=0
运算后得 紫色 R=255 G=0 B=255
 
定义个全局的(R、G、B)
 
变成24位就行了三

把第0,0的像素是一个索引三
变成索引的RGB,就成了24位了三
再把R与G对调三

后面的一样的变换
 
但我的调色板数据是这样的
const
PAL_COLOR_COUNT = 128;
var
// 调色板数据
g_PalData :array[0..PAL_COLOR_COUNT-1] of TColor = (
$000000, $0000FF, $00FF00, $00FFFF,
$ff0000, $ff00ff ,$ffff00, $ffffff,
$99894A, $90246C, $D8B4B4, $BF00FF,
………………
………………
g_PalData 为调色板数据
里面的数据为索引对应的颜色
如: g_PalData[0] = $000000;
0号色的颜色为 $000000;
如何把$XXXXXX分解成R,G,B三色,再通过一定的函数关系
变换颜色,最后再把R,G,B三色合并成$XXXXXX;
 
分不够的话另开贴加分
 
你的调色板数据,就是一个RGB颜色,
ColorToRGB 转换 TColor到RGB色

TColor32 = $0..$FFFFFFFF;//type Cardinal;

function RedComponent(Color32: TColor32): Integer;
begin
Result := (Color32 and $00FF0000) shr 16;
end;

function GreenComponent(Color32: TColor32): Integer;
begin
Result := (Color32 and $0000FF00) shr 8;
end;

function BlueComponent(Color32: TColor32): Integer;
begin
Result := Color32 and $000000FF;
end;

function AlphaComponent(Color32: TColor32): Integer;
begin
Result := Color32 shr 24;
end;

function RGBA(R, G, B: Byte; A: Byte = $FF): TColor32;
begin
Result := A shl 24 + R shl 16 + G shl 8 + B;
end;
 
问题还没解决啊
另开帖200分

现在关键是选定区域内
有颜色改变菜单
目标色(索引不变)
目的色
确定改变按钮(完成变色)

这个选定的区域又头疼了
也需要个调色板吗?会不会和系统调色板冲突?
 
如何改变整幅图的亮度?
XCanvas是写的一个类
没有Paint属性
 
后退
顶部