改变一下 DxDraw 的背景

初学delphiX ,想改变一下 DxDraw 的背景,于是找到了这篇文章

话题247821的标题是: 请教用过DelphiX的兄弟 (100分)
分类:图形图象

Nutty (2000-05-18 17:34:00)

在下用dxdraw.surface.fill(devcolor: longint)初始化背景色,
然而这个longint的devcolor我不知该如何赋值.

现象:
   查看其定义,可以用RGB颜色来表示,但当我想要背景为绿色时,
执行dxdraw.surface.fill(RGB(0,128,0))却得到紫色背景!

wjiachun (2000-05-18 17:55:00)

dxdraw.surface.fill(RGB(0,255,0));

Nutty (2000-05-18 17:56:00)

也即是说
  值域为 -7FFFFFFE----7FFFFFFF 的TColor色与
定义值域为 0----FFFFFFFF 的dev色之间如何进行转换?

Nutty (2000-05-18 17:58:00)

wjiachun兄:
  不是这样...
dxdraw.surface.fill(clgreen)得到的是紫色背景...faint

wjiachun (2000-05-18 18:07:00)

I faint too!

Croco (2000-05-18 18:08:00)

值域为 -7FFFFFFE----7FFFFFFF 的TColor色与
定义值域为 0----FFFFFFFF 的dev色之间如何进行转换?
>>
没用过 DelphiX, 转换可用:
function ColorToRGB(Color: TColor): Longint;

>>附例子中的调用,不知有没有帮助:
var Col: TRGBQuad;
c := DXDraw.Surface.ColorMatch(RGB(Col.rgbRed, Col.rgbGreen, Col.rgbBlue));
DXDraw.Surface.Fill(c);

Nutty (2000-05-19 22:52:00)

还是不行,难道它用的颜色的末六个字节不代表RGB? 还是调色板没用对?

Zephyr (2000-05-19 23:26:00)

Col参数实际上就是象素在内存中的数据,它的值取决于TDXDraw控件的
Surface.BitCount的值。当BitCount为8时,每个象素用1byte表示(8位),
这时Col参数实际上是一个调色板的索引值,只使用最后8位(0至255)。
当BitCount为24时,每个象素用3byte表示,这时Col的末六个字节才是代表
RGB三色的量。估计你用的是640X480X16等16位的显示模式(看一下DXDraw
Display属性就知道了),这时Col参数中用后15位表示RGB三色的分量,每一
色为5位,所以你用$00FF00无法显示出绿色。你可以根据你的需要用位操作来
产生出16位显示模式下的Col值。

Fudei (2000-05-20)

怎么不行呢,我用过行得

Nutty (2000-05-20 22:39:00)

确实是设成24bits真彩才正确显示颜色, Zephyr兄果然了得...

但是用户如果设置window的颜色为16或8bits时又怎么办呢? 再用RGB(r,g,b)填色又会乱显示了.我记得论坛有过讨论,但不了了之,你有好办法吗?



Zephyr (2000-05-21 1:03:00)

根据实际情况来计算颜色值(就是说先判断当前显示模式,再根据当前显示模
式下象素的格式计算颜色值)。或者让你的程序在全屏方式下运行,但要事先
把TDXDraw的Display属性设为24bits的显示模式,这样在切换到全屏方式下时
会用Display属性指定的显示模式运行。具体如何做可参考DelphiX的例子。

也许(应该)还有更好的方法。

Nutty (2000-05-22 1:24:00)

谢谢

sunwork (2000-08-03 20:44:00)

如何用DIRECTDRAW显示真彩色的图片,我只能显示256色的图片,用SETDISPLAYMODE设置(800,600,8)
再设置成(800,600,24)真彩色模式的时候就出现错误。能有办法吗?

Zephyr的回答最终被接受。

 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值