在线等候!无论桌面颜色质量如何改变(如16,24,32),都能获得一致的颜色值? (200分)

  • 主题发起人 主题发起人 wuyaobin
  • 开始时间 开始时间
W

wuyaobin

Unregistered / Unconfirmed
GUEST, unregistred user!
如何获得外部程序中的图片的象素值(如256色的位图),且无论桌面的颜色怎样设置,如改为16,24,32位色,都能获得一致的颜色值?
GetPixel(DC, x,y);可以取得颜色值,但改变桌面颜色设置后,这个颜色值又改变了.[:(]
 
那个应该不太现实吧
 
应该没可能,因为图片中的颜色是有固定RGB值的,但显示出来时则受桌面颜色的影响,取出来的颜色实际是桌面的颜色,要想取出真实的颜色,只能自己分析图片文件的数据和调色板格式,用程序来取了!
 
我想应该可以吧,我这样获得本程序内Image1图片上的颜色值:
Label1.Caption:=Format('%d',[Image1.Canvas.Pixels[x,y]]);
无论计算机设为多少位色结果都一样。
但用:
DC := GetDC(0);//或把0换成某控件的句柄
xx:=GetPixel(DC, x,y);
ReleaseDC(0, DC);//同上
改了颜色深度后得到的颜色却每次都不同!
有什么办法可以使它们一致?
 
>垃圾清洁工, menxin
说说你们的意见怎样?
 
同意coolqiang的看法
 
>>要想取出真实的颜色,只能自己分析图片文件的数据和调色板格式,用程序来取了!
能具体些吗?怎样取呢?
 
如何获得外部程序中的图片的象素值(如256色的位图)
http://www.csdn.net/dev/delphi/Samples/getcolor.zip
但是要无论桌面的颜色怎样设置,如改为16,24,32位色,都能获得一致的颜色值?
我试了一下,好象不行哦
 
想法是不可能的啦,
系统表示一个点就是那么多色素你可以加多色素????
这个问题就像在DOS下想看到光滑的图象一样,

呵呵~~~~~~~~~~~~~~~~~~
 
我也想知,还有在颜色位数相同的情况下,XP和98下的结果不同的。不知为什么?
 
.............
 
当显示设备不是处于24位真彩模式时,应用程序需要知道一个真彩RGB颜色是怎样映射到一个帧缓冲区的色彩空间中去的。举例来说,如果你正在编写一个可运行于8、16或24位显示模式的应用程序,在设置关键色或用Blit进行单色填充的时候,你所提供的颜色值必须与该页面当前的色彩空间相一致,也就是与帧缓冲区的色彩空间一致。这就是说,如果你的应用程序运行于8位色彩模式,那么你必须提供一个调色板索引;如果运行于16位色彩模式,你必须提供一个相应的16位值;如果运行于24位真彩模式,你必须提供一个24位值。用户可以选择他所期望的显示模式,那么你的程序就必须可以根据当前的显示模式,将一个特定的颜色值(通常是真彩24位值)映射到正确的色彩空间中去。

尽管DirectDraw不会为你自动完成颜色匹配的任务,但是仍有许多方法来解决如何把你的关键色映射到帧缓冲区中去。这些方法是比较复杂的。在绝大多数情况下,你可以使用GDI内建的色彩匹配服务,加上DirectDraw的直接帧缓冲区访问,来解决将一个24位颜色值匹配到不同的色彩空间中去。实际上,DirectX SDK中的Ddutil.cpp源文件包含了一个DDColorMatch函数,用它就可以完成任何色彩空间的匹配工作。它的工作原理十分巧妙,你并不需要了解每一种色彩空间的格式,它用的是“埋种子”的方法,其步骤如下:

调用Win32的GetPixel函数,取页面左上角(坐标为0,0)的像素值。
调用Win32的SetPixel函数,用COLORREF结构来描述你的24位RGB颜色,将该色设置给页面左上角。
使用DirectDraw的Lock函数锁定页面,取得指向帧缓冲区内存的指针。
从帧缓冲区中获得真实的颜色值,调用Unlock函数将页面解锁。
还原页面左上角像素颜色为原始值,使用SetPixel函数。
DDColorMatch函数的速度并不是很快,这是因为它调用了Win32的GetPixel和SetPixel函数。然而,它提供了一个可靠和值得信赖的方法来求解颜色在不同的RGB色彩空间中是如何映射的。

这是我学DX编程时找到的一些资料,不过就是很明白……继续学下去可能才明白。
上面说的问题就是楼主的问题
 
小雨哥回复怎么改了?我只是个菜鸟,不是什么高手,或者我误会楼主的意思。

我只是来学学别人的东西,学东西中不免有错,只是希望指正我的人语气婉转点[:D]
 
.............你觉得我唐突的话,我表示道歉。
 

Similar threads

S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
927
SUNSTONE的Delphi笔记
S
I
回复
0
查看
617
import
I
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部