vb 颜色不够用怎么办?
展开全部
管理多个调色板
使用调色板时,应记住对很多显示来说,屏幕上同时最多只能显示出 256 种颜色。
当应用程序中使用一种以上的彩色调色板时,此项限制就变得非常重要。例如,在单个窗体上,可在图象控件中显示一个 256 色位图,同时在图片框中显示第二个图象。如果这两个图象的逻辑调色板包含的 256 种颜色不完全相同,Windows 就必须决定先将哪一个逻辑调色板的颜色调到硬件调色板中。记住,硬件调色板决定了屏幕上实际显示的颜色。
当 Visual Basic 的应用程序有两个以上的窗体的逻辑调色板互不相同时,也会发生类似的情况。哪个窗体接收到焦点,它的逻辑调色板就控制硬件调色板。这样常会导致显示效果比在 256 色系统下的最优显示要差一些。作为 Visual Basic 程序员,可通过使用 PaletteMode 属性来控制硬件调色板。
PaletteMode 属性
当设计可在 256 色系统下运行的应用程序时,通过设置窗体、用户控件或用户文档的 PaletteMode 属性,能控制 Windows 选择显示颜色的途径(用户控件和用户文档只在专业版和企业版中有效。)。窗体、用户控件或用户文档中含有的所有控件,都要根据 PaletteMode 的设置来显示。下表列出了 PaletteMode 的有效设置:
模式 常数 应用到
Halftone vbPaletteModeHalftone 窗体,用户控件,用户文档
UseZOrder vbPaletteModeUseZOrder 窗体,用户控件,用户文档
Custom vbPaletteModeCustom 窗体,用户控件,用户文档
Container vbPaletteModeContainer 用户控件
None vbPaletteModeNone 用户控件
Object vbPaletteModeObject 含有调色板的ActiveX 设计器
PaletteMode 属性只应用于 256 色的显示。在增强色或真彩色显示中,可通过视频驱动程序分别使用 32,000 色或 16 兆色的调色板,来控制颜色的选择。即使在一个以增强色或真彩色显示的系统中设计程序时,还是要设置 PaletteMode,因为许多用户可能用的是 256 色显示。
PaletteMode 属性可在设计时通过“属性”窗口来设置,也可在运行时通过代码来改变。调色板示例应用程序使用几种不同的 PaletteMode 设置,显示出带有不同调色板图象的显示效果。
注意 对于 Visual Basic 的老版本,PaletteMode 相当于 UseZOrder。
中间色调的 PaletteMode
窗体和用户文档的缺省模式为中间色调。在这种模式下,包含在窗体中的任何控件、图象,或图形方法使用系统中间色调的调色板绘图。
在大多数情况下,中间色调模式是一种很好的选择,因为它在窗体中的图象与其它窗体或图象中使用的颜色之间,提供了折衷办法。当然,它也会导致图象质量的下降。例如,一个具有包含 256 种深度灰色调色板的图象,在显示时可能会丢失某个细节或显示出其它难以预料的颜色。
UseZOrder PaletteMode
零排序是一个相对的排序,它决定窗体中的控件,相互间如何重叠。对于带有焦点的窗体,当它的 PaletteMode 被设置为 UseZOrder 时,总是最顶层控件的调色板享有优先权。这就是说,每当一个新控件成为最顶层时(如:调一个新图象到图片框中),硬件调色板都将重新映射。这常常会引起称为调色板闪烁的副作用:当新颜色显示时,会出现闪烁,在当前窗体和其它任何可见的窗体或应用程序中都是如此。
尽管 UseZOrder 设置提供了最准确的颜色显示,但它速度较慢。而且,这种方法会引起窗体的背景色,或无图象控件的背景色出现抖动。当准确显示一个顶层图象比产生调色板闪烁更重要,或需要保持 Visual Basic 老版本的向下兼容时,将 PaletteMode 设置为 UseZOrde 是最好的选择。
自定义 PaletteMode
如果需要更精确地控制实际显示的颜色,可用 256 色映象定义一个自定义调色板。要实现这一点,需赋值给窗体的 Palette 属性一个 256 色映象(.bmp、.cur、ico、.dib 或 .gif ),并将 PaletteMode 属性设置为 Custom。位图不用很大,甚至一个单独的像素就可以为窗体或图片框定义 256 种颜色。这是因为位图的逻辑调色板能列出 256 种颜色,而不论那些颜色是否全部出现在位图中。
因为有缺省方法,所以使用 RGB 函数定义的颜色也必须存在于位图中。如果此颜色不匹配,它将被映射到逻辑调色板中最接近的匹配色,此逻辑调色板属于由 Palette 属性指定的位图。
要想在运行时设置自定义 PaletteMode,需在 Form_Load 事件中添加下列代码(假定具有所选调色板的图象已经被赋值给名为 Image1 的图象控件):
'将调色板从 Image1 赋值给窗体。
Form1.Palette = Image1.Picture
'使用 Custom 模式。
Form1.PaletteMode = vbPaletteModeCustom
另外,也可使用图片对象来达到相同的效果,而无需另加图象控件:
Dim objPic As Picture
Set objPic = LoadPicture(App.Path & "\Pastel.bmp ")
'将图片对象的调色板赋值给窗体。
Form1.Palette = objPic
'使用 Custom 模式。
Form1.PaletteMode = vbPaletteModeCustom
当希望在应用程序中,自始至终保持同一个调色板时,自定义 PaletteMode是最佳的选择。
注意 在不能使用任何 256 色图形的情况下,使用“Custom PaletteMode”也可增强应用程序的性能。如果将窗体的 PaletteMode 设置为自定义的,并将 Palette 属性置为空,则该窗体就能快速装入,因为不会发生调色板匹配的问题。
详细信息 关于图片对象的详细信息,请参阅本章后面的“使用图片对象”。
其它调色板模式
创建用户控件时还有两种可用的附加 PaletteMode 设置:Container 和 None。Container 模式将用户控件和所包含其它控件的调色板,在运行时映射为容器(窗体或用户文档)的环境调色板。如果该容器没有提供环境调色板,则调用中间色调模式。因为事先不知道用户控件会在何处被调用,所以该模式可以避免控件与其它调色板处理方法发生冲突。
None 模式所做的正如可预料的那样:它清除所有的调色板处理。当创建一个不显示图象或图形的用户控件时,通过清除处理调色板信息的附加表头,将 PaletteMode 设为 None,可提高性能。
使用相关调色板颜色
当为 256 色显示设计时,有些颜色可能会出现抖动。这可能使文本或其他的图形元素难于辨认。通过指定一个相关调色板颜色,Visual Basic 能够在以更高的颜色深度精确地显示颜色的同时,显示 256 色中某种指定颜色的最近似的非抖动颜色。
要强制 Visual Basic 对一个给定的属性使用最近似的单色而不是抖动的颜色,可以在该颜色属性的高位字节放置一个 2,例如,要强制一个窗体的背景色为纯浅橙色,可以使用下面的代码:
Private Function PaletteRGB(RGB As Long) As Long
PaletteRGB = &H02000000 Or RGB
End Function
如果在设计时设置下面的属性:
Form1.BackColor = &H00C0E0FF& '抖动的浅橙色
并且添加下列代码到 Form_Click 事件中:
Private Sub Form_Click()
Form1.BackColor = PaletteRGB(Form1.BackColor)
End Sub
在运行时单击该窗体,其背景色将改变为单色而不是抖动的阴影。现在,它所使用的是来自于 halftone 调色板的最近似的颜色。如果系统运行的颜色深度高于 256 色,可能就看不到这种效果。
使用 256 种颜色
基于具有能处理 256 色或 256 色以上的视频适配器和显示驱动程序的系统,Visual Basic 可支持 256 种颜色。对于多媒体应用程序,或对于那些需要显示接近相片质量图像的应用程序来说,能同时显示 256 色的功能,是特别有价值的。
在以下场合,可显示 256 色的图象,也可为图形方法定义高达 256 色:
窗体
PictureBox
Image 控件(仅显示图象)
注意 Windows 的元文件,不支持 256 种色。Visual Basic 用缺省的 VGA 16 色的调色板来显示图元文件。
调色板
在 Visual Basic 应用程序中,调色板提供了支持 256 种颜色的基础。在关于调色板的讨论中,了解不同类型调色板之间的关系很重要。硬件调色板包含了 256 个记录项,它们定义了将在屏幕上显示的实际 RGB 值。系统中间色调的调色板是一套预定义的 256 种 RGB 值,对 Windows 本身有效。逻辑调色板是一套可到达 256 种 RGB 的值,它们包含在位图或其它图象中。
Windows 可使用硬件调色板中的 256 种颜色绘图。其中有 20 种颜色被称为静态颜色,是由系统保护的,应用程序不能将其改变。静态颜色包括缺省的 VGA 调色板中的 16 种颜色(与 Visual Basic QBColor 函数定义的颜色一样),外加四种不同深度的灰色。系统中间色调的调色板,通常包含这些静态颜色。
前景窗口(有焦点的窗口),将决定硬件调色板中剩下的 236 种非静态颜色。每当硬件调色板改变时,使用这些颜色的所有背景窗口都要重画。如果背景窗口的逻辑调色板的颜色与当前硬件调色板的颜色不完全匹配,Windows 会赋予一个最接近的匹配值。
256 色图象的显示
如果显示硬件和软件能支持 256 种颜色的话,窗体、图片框和图象控件能自动地用 256 色显示图象。如果用户系统支持的颜色少于图象所需的颜色,Visual Basic 尽可能地将所需颜色映射到最相近的颜色上。
对于真彩色(1,600 万种颜色)的显示,Visual Basic 总是使用正确的颜色。对于单色或 16 色的显示,Visual Basic 会使背景色和用 FillColor 属性设置的颜色抖动。抖动是用来模拟从视频适配器和显示驱动设备得不到的颜色的过程。
用调色板绘图
对于 256 色的视频驱动程序,通过图形方法可使用高达 256 种的颜色。按照缺省规定,Visual Basic 中有效的 256 色是系统中间色调的调色板中的颜色。尽管可用 RGB 函数来指定一种具体的颜色,但实际显示的颜色,是从系统中间色调的调色板中得到的最接近匹配的颜色,这一点显示在图 12.22 中。
图 12.22 从指定色到显示的颜色匹配方式
尽管缺省调色板对于 Visual Basic 来说是系统中间色调的调色板,但使用窗体、用户控件和用户文档的 PaletteMode 属性和 Palette 属性,也可控制颜色的显示。这种情况下,除了颜色要在硬件调色板中与最接近色匹配之外,颜色的匹配关系是一样的。
详细信息 关于调色板和调色板属性的详细内容,请参阅本章后面的“管理多个调色板”。
管理多个调色板
使用调色板时,应记住对很多显示来说,屏幕上同时最多只能显示出 256 种颜色。
当应用程序中使用一种以上的彩色调色板时,此项限制就变得非常重要。例如,在单个窗体上,可在图象控件中显示一个 256 色位图,同时在图片框中显示第二个图象。如果这两个图象的逻辑调色板包含的 256 种颜色不完全相同,Windows 就必须决定先将哪一个逻辑调色板的颜色调到硬件调色板中。记住,硬件调色板决定了屏幕上实际显示的颜色。
当 Visual Basic 的应用程序有两个以上的窗体的逻辑调色板互不相同时,也会发生类似的情况。哪个窗体接收到焦点,它的逻辑调色板就控制硬件调色板。这样常会导致显示效果比在 256 色系统下的最优显示要差一些。作为 Visual Basic 程序员,可通过使用 PaletteMode 属性来控制硬件调色板。
PaletteMode 属性
当设计可在 256 色系统下运行的应用程序时,通过设置窗体、用户控件或用户文档的 PaletteMode 属性,能控制 Windows 选择显示颜色的途径(用户控件和用户文档只在专业版和企业版中有效。)。窗体、用户控件或用户文档中含有的所有控件,都要根据 PaletteMode 的设置来显示。下表列出了 PaletteMode 的有效设置:
模式 常数 应用到
Halftone vbPaletteModeHalftone 窗体,用户控件,用户文档
UseZOrder vbPaletteModeUseZOrder 窗体,用户控件,用户文档
Custom vbPaletteModeCustom 窗体,用户控件,用户文档
Container vbPaletteModeContainer 用户控件
None vbPaletteModeNone 用户控件
Object vbPaletteModeObject 含有调色板的ActiveX 设计器
PaletteMode 属性只应用于 256 色的显示。在增强色或真彩色显示中,可通过视频驱动程序分别使用 32,000 色或 16 兆色的调色板,来控制颜色的选择。即使在一个以增强色或真彩色显示的系统中设计程序时,还是要设置 PaletteMode,因为许多用户可能用的是 256 色显示。
PaletteMode 属性可在设计时通过“属性”窗口来设置,也可在运行时通过代码来改变。调色板示例应用程序使用几种不同的 PaletteMode 设置,显示出带有不同调色板图象的显示效果。
注意 对于 Visual Basic 的老版本,PaletteMode 相当于 UseZOrder。
中间色调的 PaletteMode
窗体和用户文档的缺省模式为中间色调。在这种模式下,包含在窗体中的任何控件、图象,或图形方法使用系统中间色调的调色板绘图。
在大多数情况下,中间色调模式是一种很好的选择,因为它在窗体中的图象与其它窗体或图象中使用的颜色之间,提供了折衷办法。当然,它也会导致图象质量的下降。例如,一个具有包含 256 种深度灰色调色板的图象,在显示时可能会丢失某个细节或显示出其它难以预料的颜色。
UseZOrder PaletteMode
零排序是一个相对的排序,它决定窗体中的控件,相互间如何重叠。对于带有焦点的窗体,当它的 PaletteMode 被设置为 UseZOrder 时,总是最顶层控件的调色板享有优先权。这就是说,每当一个新控件成为最顶层时(如:调一个新图象到图片框中),硬件调色板都将重新映射。这常常会引起称为调色板闪烁的副作用:当新颜色显示时,会出现闪烁,在当前窗体和其它任何可见的窗体或应用程序中都是如此。
尽管 UseZOrder 设置提供了最准确的颜色显示,但它速度较慢。而且,这种方法会引起窗体的背景色,或无图象控件的背景色出现抖动。当准确显示一个顶层图象比产生调色板闪烁更重要,或需要保持 Visual Basic 老版本的向下兼容时,将 PaletteMode 设置为 UseZOrde 是最好的选择。
自定义 PaletteMode
如果需要更精确地控制实际显示的颜色,可用 256 色映象定义一个自定义调色板。要实现这一点,需赋值给窗体的 Palette 属性一个 256 色映象(.bmp、.cur、ico、.dib 或 .gif ),并将 PaletteMode 属性设置为 Custom。位图不用很大,甚至一个单独的像素就可以为窗体或图片框定义 256 种颜色。这是因为位图的逻辑调色板能列出 256 种颜色,而不论那些颜色是否全部出现在位图中。
因为有缺省方法,所以使用 RGB 函数定义的颜色也必须存在于位图中。如果此颜色不匹配,它将被映射到逻辑调色板中最接近的匹配色,此逻辑调色板属于由 Palette 属性指定的位图。
要想在运行时设置自定义 PaletteMode,需在 Form_Load 事件中添加下列代码(假定具有所选调色板的图象已经被赋值给名为 Image1 的图象控件):
'将调色板从 Image1 赋值给窗体。
Form1.Palette = Image1.Picture
'使用 Custom 模式。
Form1.PaletteMode = vbPaletteModeCustom
另外,也可使用图片对象来达到相同的效果,而无需另加图象控件:
Dim objPic As Picture
Set objPic = LoadPicture(App.Path & "\Pastel.bmp ")
'将图片对象的调色板赋值给窗体。
Form1.Palette = objPic
'使用 Custom 模式。
Form1.PaletteMode = vbPaletteModeCustom
当希望在应用程序中,自始至终保持同一个调色板时,自定义 PaletteMode是最佳的选择。
注意 在不能使用任何 256 色图形的情况下,使用“Custom PaletteMode”也可增强应用程序的性能。如果将窗体的 PaletteMode 设置为自定义的,并将 Palette 属性置为空,则该窗体就能快速装入,因为不会发生调色板匹配的问题。
详细信息 关于图片对象的详细信息,请参阅本章后面的“使用图片对象”。
其它调色板模式
创建用户控件时还有两种可用的附加 PaletteMode 设置:Container 和 None。Container 模式将用户控件和所包含其它控件的调色板,在运行时映射为容器(窗体或用户文档)的环境调色板。如果该容器没有提供环境调色板,则调用中间色调模式。因为事先不知道用户控件会在何处被调用,所以该模式可以避免控件与其它调色板处理方法发生冲突。
None 模式所做的正如可预料的那样:它清除所有的调色板处理。当创建一个不显示图象或图形的用户控件时,通过清除处理调色板信息的附加表头,将 PaletteMode 设为 None,可提高性能。
使用相关调色板颜色
当为 256 色显示设计时,有些颜色可能会出现抖动。这可能使文本或其他的图形元素难于辨认。通过指定一个相关调色板颜色,Visual Basic 能够在以更高的颜色深度精确地显示颜色的同时,显示 256 色中某种指定颜色的最近似的非抖动颜色。
要强制 Visual Basic 对一个给定的属性使用最近似的单色而不是抖动的颜色,可以在该颜色属性的高位字节放置一个 2,例如,要强制一个窗体的背景色为纯浅橙色,可以使用下面的代码:
Private Function PaletteRGB(RGB As Long) As Long
PaletteRGB = &H02000000 Or RGB
End Function
如果在设计时设置下面的属性:
Form1.BackColor = &H00C0E0FF& '抖动的浅橙色
并且添加下列代码到 Form_Click 事件中:
Private Sub Form_Click()
Form1.BackColor = PaletteRGB(Form1.BackColor)
End Sub
在运行时单击该窗体,其背景色将改变为单色而不是抖动的阴影。现在,它所使用的是来自于 halftone 调色板的最近似的颜色。如果系统运行的颜色深度高于 256 色,可能就看不到这种效果。
使用调色板时,应记住对很多显示来说,屏幕上同时最多只能显示出 256 种颜色。
当应用程序中使用一种以上的彩色调色板时,此项限制就变得非常重要。例如,在单个窗体上,可在图象控件中显示一个 256 色位图,同时在图片框中显示第二个图象。如果这两个图象的逻辑调色板包含的 256 种颜色不完全相同,Windows 就必须决定先将哪一个逻辑调色板的颜色调到硬件调色板中。记住,硬件调色板决定了屏幕上实际显示的颜色。
当 Visual Basic 的应用程序有两个以上的窗体的逻辑调色板互不相同时,也会发生类似的情况。哪个窗体接收到焦点,它的逻辑调色板就控制硬件调色板。这样常会导致显示效果比在 256 色系统下的最优显示要差一些。作为 Visual Basic 程序员,可通过使用 PaletteMode 属性来控制硬件调色板。
PaletteMode 属性
当设计可在 256 色系统下运行的应用程序时,通过设置窗体、用户控件或用户文档的 PaletteMode 属性,能控制 Windows 选择显示颜色的途径(用户控件和用户文档只在专业版和企业版中有效。)。窗体、用户控件或用户文档中含有的所有控件,都要根据 PaletteMode 的设置来显示。下表列出了 PaletteMode 的有效设置:
模式 常数 应用到
Halftone vbPaletteModeHalftone 窗体,用户控件,用户文档
UseZOrder vbPaletteModeUseZOrder 窗体,用户控件,用户文档
Custom vbPaletteModeCustom 窗体,用户控件,用户文档
Container vbPaletteModeContainer 用户控件
None vbPaletteModeNone 用户控件
Object vbPaletteModeObject 含有调色板的ActiveX 设计器
PaletteMode 属性只应用于 256 色的显示。在增强色或真彩色显示中,可通过视频驱动程序分别使用 32,000 色或 16 兆色的调色板,来控制颜色的选择。即使在一个以增强色或真彩色显示的系统中设计程序时,还是要设置 PaletteMode,因为许多用户可能用的是 256 色显示。
PaletteMode 属性可在设计时通过“属性”窗口来设置,也可在运行时通过代码来改变。调色板示例应用程序使用几种不同的 PaletteMode 设置,显示出带有不同调色板图象的显示效果。
注意 对于 Visual Basic 的老版本,PaletteMode 相当于 UseZOrder。
中间色调的 PaletteMode
窗体和用户文档的缺省模式为中间色调。在这种模式下,包含在窗体中的任何控件、图象,或图形方法使用系统中间色调的调色板绘图。
在大多数情况下,中间色调模式是一种很好的选择,因为它在窗体中的图象与其它窗体或图象中使用的颜色之间,提供了折衷办法。当然,它也会导致图象质量的下降。例如,一个具有包含 256 种深度灰色调色板的图象,在显示时可能会丢失某个细节或显示出其它难以预料的颜色。
UseZOrder PaletteMode
零排序是一个相对的排序,它决定窗体中的控件,相互间如何重叠。对于带有焦点的窗体,当它的 PaletteMode 被设置为 UseZOrder 时,总是最顶层控件的调色板享有优先权。这就是说,每当一个新控件成为最顶层时(如:调一个新图象到图片框中),硬件调色板都将重新映射。这常常会引起称为调色板闪烁的副作用:当新颜色显示时,会出现闪烁,在当前窗体和其它任何可见的窗体或应用程序中都是如此。
尽管 UseZOrder 设置提供了最准确的颜色显示,但它速度较慢。而且,这种方法会引起窗体的背景色,或无图象控件的背景色出现抖动。当准确显示一个顶层图象比产生调色板闪烁更重要,或需要保持 Visual Basic 老版本的向下兼容时,将 PaletteMode 设置为 UseZOrde 是最好的选择。
自定义 PaletteMode
如果需要更精确地控制实际显示的颜色,可用 256 色映象定义一个自定义调色板。要实现这一点,需赋值给窗体的 Palette 属性一个 256 色映象(.bmp、.cur、ico、.dib 或 .gif ),并将 PaletteMode 属性设置为 Custom。位图不用很大,甚至一个单独的像素就可以为窗体或图片框定义 256 种颜色。这是因为位图的逻辑调色板能列出 256 种颜色,而不论那些颜色是否全部出现在位图中。
因为有缺省方法,所以使用 RGB 函数定义的颜色也必须存在于位图中。如果此颜色不匹配,它将被映射到逻辑调色板中最接近的匹配色,此逻辑调色板属于由 Palette 属性指定的位图。
要想在运行时设置自定义 PaletteMode,需在 Form_Load 事件中添加下列代码(假定具有所选调色板的图象已经被赋值给名为 Image1 的图象控件):
'将调色板从 Image1 赋值给窗体。
Form1.Palette = Image1.Picture
'使用 Custom 模式。
Form1.PaletteMode = vbPaletteModeCustom
另外,也可使用图片对象来达到相同的效果,而无需另加图象控件:
Dim objPic As Picture
Set objPic = LoadPicture(App.Path & "\Pastel.bmp ")
'将图片对象的调色板赋值给窗体。
Form1.Palette = objPic
'使用 Custom 模式。
Form1.PaletteMode = vbPaletteModeCustom
当希望在应用程序中,自始至终保持同一个调色板时,自定义 PaletteMode是最佳的选择。
注意 在不能使用任何 256 色图形的情况下,使用“Custom PaletteMode”也可增强应用程序的性能。如果将窗体的 PaletteMode 设置为自定义的,并将 Palette 属性置为空,则该窗体就能快速装入,因为不会发生调色板匹配的问题。
详细信息 关于图片对象的详细信息,请参阅本章后面的“使用图片对象”。
其它调色板模式
创建用户控件时还有两种可用的附加 PaletteMode 设置:Container 和 None。Container 模式将用户控件和所包含其它控件的调色板,在运行时映射为容器(窗体或用户文档)的环境调色板。如果该容器没有提供环境调色板,则调用中间色调模式。因为事先不知道用户控件会在何处被调用,所以该模式可以避免控件与其它调色板处理方法发生冲突。
None 模式所做的正如可预料的那样:它清除所有的调色板处理。当创建一个不显示图象或图形的用户控件时,通过清除处理调色板信息的附加表头,将 PaletteMode 设为 None,可提高性能。
使用相关调色板颜色
当为 256 色显示设计时,有些颜色可能会出现抖动。这可能使文本或其他的图形元素难于辨认。通过指定一个相关调色板颜色,Visual Basic 能够在以更高的颜色深度精确地显示颜色的同时,显示 256 色中某种指定颜色的最近似的非抖动颜色。
要强制 Visual Basic 对一个给定的属性使用最近似的单色而不是抖动的颜色,可以在该颜色属性的高位字节放置一个 2,例如,要强制一个窗体的背景色为纯浅橙色,可以使用下面的代码:
Private Function PaletteRGB(RGB As Long) As Long
PaletteRGB = &H02000000 Or RGB
End Function
如果在设计时设置下面的属性:
Form1.BackColor = &H00C0E0FF& '抖动的浅橙色
并且添加下列代码到 Form_Click 事件中:
Private Sub Form_Click()
Form1.BackColor = PaletteRGB(Form1.BackColor)
End Sub
在运行时单击该窗体,其背景色将改变为单色而不是抖动的阴影。现在,它所使用的是来自于 halftone 调色板的最近似的颜色。如果系统运行的颜色深度高于 256 色,可能就看不到这种效果。
使用 256 种颜色
基于具有能处理 256 色或 256 色以上的视频适配器和显示驱动程序的系统,Visual Basic 可支持 256 种颜色。对于多媒体应用程序,或对于那些需要显示接近相片质量图像的应用程序来说,能同时显示 256 色的功能,是特别有价值的。
在以下场合,可显示 256 色的图象,也可为图形方法定义高达 256 色:
窗体
PictureBox
Image 控件(仅显示图象)
注意 Windows 的元文件,不支持 256 种色。Visual Basic 用缺省的 VGA 16 色的调色板来显示图元文件。
调色板
在 Visual Basic 应用程序中,调色板提供了支持 256 种颜色的基础。在关于调色板的讨论中,了解不同类型调色板之间的关系很重要。硬件调色板包含了 256 个记录项,它们定义了将在屏幕上显示的实际 RGB 值。系统中间色调的调色板是一套预定义的 256 种 RGB 值,对 Windows 本身有效。逻辑调色板是一套可到达 256 种 RGB 的值,它们包含在位图或其它图象中。
Windows 可使用硬件调色板中的 256 种颜色绘图。其中有 20 种颜色被称为静态颜色,是由系统保护的,应用程序不能将其改变。静态颜色包括缺省的 VGA 调色板中的 16 种颜色(与 Visual Basic QBColor 函数定义的颜色一样),外加四种不同深度的灰色。系统中间色调的调色板,通常包含这些静态颜色。
前景窗口(有焦点的窗口),将决定硬件调色板中剩下的 236 种非静态颜色。每当硬件调色板改变时,使用这些颜色的所有背景窗口都要重画。如果背景窗口的逻辑调色板的颜色与当前硬件调色板的颜色不完全匹配,Windows 会赋予一个最接近的匹配值。
256 色图象的显示
如果显示硬件和软件能支持 256 种颜色的话,窗体、图片框和图象控件能自动地用 256 色显示图象。如果用户系统支持的颜色少于图象所需的颜色,Visual Basic 尽可能地将所需颜色映射到最相近的颜色上。
对于真彩色(1,600 万种颜色)的显示,Visual Basic 总是使用正确的颜色。对于单色或 16 色的显示,Visual Basic 会使背景色和用 FillColor 属性设置的颜色抖动。抖动是用来模拟从视频适配器和显示驱动设备得不到的颜色的过程。
用调色板绘图
对于 256 色的视频驱动程序,通过图形方法可使用高达 256 种的颜色。按照缺省规定,Visual Basic 中有效的 256 色是系统中间色调的调色板中的颜色。尽管可用 RGB 函数来指定一种具体的颜色,但实际显示的颜色,是从系统中间色调的调色板中得到的最接近匹配的颜色,这一点显示在图 12.22 中。
图 12.22 从指定色到显示的颜色匹配方式
尽管缺省调色板对于 Visual Basic 来说是系统中间色调的调色板,但使用窗体、用户控件和用户文档的 PaletteMode 属性和 Palette 属性,也可控制颜色的显示。这种情况下,除了颜色要在硬件调色板中与最接近色匹配之外,颜色的匹配关系是一样的。
详细信息 关于调色板和调色板属性的详细内容,请参阅本章后面的“管理多个调色板”。
管理多个调色板
使用调色板时,应记住对很多显示来说,屏幕上同时最多只能显示出 256 种颜色。
当应用程序中使用一种以上的彩色调色板时,此项限制就变得非常重要。例如,在单个窗体上,可在图象控件中显示一个 256 色位图,同时在图片框中显示第二个图象。如果这两个图象的逻辑调色板包含的 256 种颜色不完全相同,Windows 就必须决定先将哪一个逻辑调色板的颜色调到硬件调色板中。记住,硬件调色板决定了屏幕上实际显示的颜色。
当 Visual Basic 的应用程序有两个以上的窗体的逻辑调色板互不相同时,也会发生类似的情况。哪个窗体接收到焦点,它的逻辑调色板就控制硬件调色板。这样常会导致显示效果比在 256 色系统下的最优显示要差一些。作为 Visual Basic 程序员,可通过使用 PaletteMode 属性来控制硬件调色板。
PaletteMode 属性
当设计可在 256 色系统下运行的应用程序时,通过设置窗体、用户控件或用户文档的 PaletteMode 属性,能控制 Windows 选择显示颜色的途径(用户控件和用户文档只在专业版和企业版中有效。)。窗体、用户控件或用户文档中含有的所有控件,都要根据 PaletteMode 的设置来显示。下表列出了 PaletteMode 的有效设置:
模式 常数 应用到
Halftone vbPaletteModeHalftone 窗体,用户控件,用户文档
UseZOrder vbPaletteModeUseZOrder 窗体,用户控件,用户文档
Custom vbPaletteModeCustom 窗体,用户控件,用户文档
Container vbPaletteModeContainer 用户控件
None vbPaletteModeNone 用户控件
Object vbPaletteModeObject 含有调色板的ActiveX 设计器
PaletteMode 属性只应用于 256 色的显示。在增强色或真彩色显示中,可通过视频驱动程序分别使用 32,000 色或 16 兆色的调色板,来控制颜色的选择。即使在一个以增强色或真彩色显示的系统中设计程序时,还是要设置 PaletteMode,因为许多用户可能用的是 256 色显示。
PaletteMode 属性可在设计时通过“属性”窗口来设置,也可在运行时通过代码来改变。调色板示例应用程序使用几种不同的 PaletteMode 设置,显示出带有不同调色板图象的显示效果。
注意 对于 Visual Basic 的老版本,PaletteMode 相当于 UseZOrder。
中间色调的 PaletteMode
窗体和用户文档的缺省模式为中间色调。在这种模式下,包含在窗体中的任何控件、图象,或图形方法使用系统中间色调的调色板绘图。
在大多数情况下,中间色调模式是一种很好的选择,因为它在窗体中的图象与其它窗体或图象中使用的颜色之间,提供了折衷办法。当然,它也会导致图象质量的下降。例如,一个具有包含 256 种深度灰色调色板的图象,在显示时可能会丢失某个细节或显示出其它难以预料的颜色。
UseZOrder PaletteMode
零排序是一个相对的排序,它决定窗体中的控件,相互间如何重叠。对于带有焦点的窗体,当它的 PaletteMode 被设置为 UseZOrder 时,总是最顶层控件的调色板享有优先权。这就是说,每当一个新控件成为最顶层时(如:调一个新图象到图片框中),硬件调色板都将重新映射。这常常会引起称为调色板闪烁的副作用:当新颜色显示时,会出现闪烁,在当前窗体和其它任何可见的窗体或应用程序中都是如此。
尽管 UseZOrder 设置提供了最准确的颜色显示,但它速度较慢。而且,这种方法会引起窗体的背景色,或无图象控件的背景色出现抖动。当准确显示一个顶层图象比产生调色板闪烁更重要,或需要保持 Visual Basic 老版本的向下兼容时,将 PaletteMode 设置为 UseZOrde 是最好的选择。
自定义 PaletteMode
如果需要更精确地控制实际显示的颜色,可用 256 色映象定义一个自定义调色板。要实现这一点,需赋值给窗体的 Palette 属性一个 256 色映象(.bmp、.cur、ico、.dib 或 .gif ),并将 PaletteMode 属性设置为 Custom。位图不用很大,甚至一个单独的像素就可以为窗体或图片框定义 256 种颜色。这是因为位图的逻辑调色板能列出 256 种颜色,而不论那些颜色是否全部出现在位图中。
因为有缺省方法,所以使用 RGB 函数定义的颜色也必须存在于位图中。如果此颜色不匹配,它将被映射到逻辑调色板中最接近的匹配色,此逻辑调色板属于由 Palette 属性指定的位图。
要想在运行时设置自定义 PaletteMode,需在 Form_Load 事件中添加下列代码(假定具有所选调色板的图象已经被赋值给名为 Image1 的图象控件):
'将调色板从 Image1 赋值给窗体。
Form1.Palette = Image1.Picture
'使用 Custom 模式。
Form1.PaletteMode = vbPaletteModeCustom
另外,也可使用图片对象来达到相同的效果,而无需另加图象控件:
Dim objPic As Picture
Set objPic = LoadPicture(App.Path & "\Pastel.bmp ")
'将图片对象的调色板赋值给窗体。
Form1.Palette = objPic
'使用 Custom 模式。
Form1.PaletteMode = vbPaletteModeCustom
当希望在应用程序中,自始至终保持同一个调色板时,自定义 PaletteMode是最佳的选择。
注意 在不能使用任何 256 色图形的情况下,使用“Custom PaletteMode”也可增强应用程序的性能。如果将窗体的 PaletteMode 设置为自定义的,并将 Palette 属性置为空,则该窗体就能快速装入,因为不会发生调色板匹配的问题。
详细信息 关于图片对象的详细信息,请参阅本章后面的“使用图片对象”。
其它调色板模式
创建用户控件时还有两种可用的附加 PaletteMode 设置:Container 和 None。Container 模式将用户控件和所包含其它控件的调色板,在运行时映射为容器(窗体或用户文档)的环境调色板。如果该容器没有提供环境调色板,则调用中间色调模式。因为事先不知道用户控件会在何处被调用,所以该模式可以避免控件与其它调色板处理方法发生冲突。
None 模式所做的正如可预料的那样:它清除所有的调色板处理。当创建一个不显示图象或图形的用户控件时,通过清除处理调色板信息的附加表头,将 PaletteMode 设为 None,可提高性能。
使用相关调色板颜色
当为 256 色显示设计时,有些颜色可能会出现抖动。这可能使文本或其他的图形元素难于辨认。通过指定一个相关调色板颜色,Visual Basic 能够在以更高的颜色深度精确地显示颜色的同时,显示 256 色中某种指定颜色的最近似的非抖动颜色。
要强制 Visual Basic 对一个给定的属性使用最近似的单色而不是抖动的颜色,可以在该颜色属性的高位字节放置一个 2,例如,要强制一个窗体的背景色为纯浅橙色,可以使用下面的代码:
Private Function PaletteRGB(RGB As Long) As Long
PaletteRGB = &H02000000 Or RGB
End Function
如果在设计时设置下面的属性:
Form1.BackColor = &H00C0E0FF& '抖动的浅橙色
并且添加下列代码到 Form_Click 事件中:
Private Sub Form_Click()
Form1.BackColor = PaletteRGB(Form1.BackColor)
End Sub
在运行时单击该窗体,其背景色将改变为单色而不是抖动的阴影。现在,它所使用的是来自于 halftone 调色板的最近似的颜色。如果系统运行的颜色深度高于 256 色,可能就看不到这种效果。
展开全部
你是说vb代码定义的颜色吗?如vbred,vbblack什么的??
实际这个就是一个数值,只是vb为了方便大家使用,将其定义成这个字符了,你可以采用RGB函数,随便用了,如楼上所说,65536种颜色如果还不够用的话,估计你的显示器也需要更换
试试吧。
实际这个就是一个数值,只是vb为了方便大家使用,将其定义成这个字符了,你可以采用RGB函数,随便用了,如楼上所说,65536种颜色如果还不够用的话,估计你的显示器也需要更换
试试吧。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这个我不太懂,不好意思,不过不能添加颜色吗,里面没有可以选择的色板吗
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
65536种颜色不够吗
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询