Adobe吸管控件






4.35/5 (9投票s)
一个可以放入任何 .NET 项目的屏幕拾色控件。
引言
虽然有很多关于颜色拾取器和对话框的文章,但很少包含滴管。 如果包含它,通常会硬连线到颜色拾取器中,使其难以放入其他项目中。 我正在开发的当前图形应用程序需要一个滴管,所以在经过一些 Google 搜索和 CodeProject 研究后,我决定创建自己的自定义滴管控件。 我将其命名为 Adobe 滴管控件,因为滴管图像实际上是从 Adobe Photoshop 截屏的。 好的,废话少说,让我们直接进入代码。
Using the Code
您会注意到滴管控件存储在一个程序集文件 (.dll) 中。 这是因为在捕获屏幕时使用了自定义光标。 即使加载自定义光标并不复杂,管理所有细节也可能会非常烦人。 我希望这个控件在开发人员将其放入他们的项目后就能完全发挥作用。 让我们讨论一下滴管的一些属性和事件。
像素预览窗口
该控件带有一个弹出窗口,该窗口向我们提供有关正在捕获的像素的反馈。 默认情况下,该窗口将在悬停之前将自身居中于滴管控件上方。 我们有几个选项可以使用 PreviewPositionStyle
属性定位窗口。
eyedropper1.PreviewPositionStyle = ePreviewPositionStyle.Centered;
如果 PreviewPositionStyle
设置为 Manual
,您可以通过 PreviewLocation
属性指定窗口的确切位置。 请记住,PreviewLocation
的值是相对于滴管控件的左上角而言的。
eyedropper1.PreviewPositionStyle = ePreviewPositionStyle.Manual;
eyedropper1.PreviewLocation = new Point(100, 250);
默认情况下,像素预览窗口将显示两项:从屏幕捕获的颜色,以及周围屏幕区域的放大视图。 这些设置可以使用以下属性进行更改
ShowColorPreview
ShowPixelPreview
PixelPreviewSize
PixelPreviewZoom
前两个属性应该是不言自明的,所以我们来讨论后两个。 PixelPreviewSize
属性指定要捕获多少屏幕空间。 如果我们不能放大捕获区域,那么真的没有必要预览像素。 PixelPreviewZoom
允许我们指定放大捕获区域的程度。 正如您所期望的,缩放值由浮点值表示。 例如,值为 1.0 将不应用任何缩放。 所有大于 1.0 的值都将放大。
捕获屏幕捕获事件
一旦滴管开始捕获像素,您就可以使用 SelectedColorChange
事件捕获该事件。 此基本事件仅用于通知目的而触发。 但是,如果情况需要更多细节,您可以捕获以下事件
BeginScreenCapture
ScreenCaptured
EndScreenCapture
当用户在滴管控件上按下鼠标左键时,BeginScreenCapture
事件会触发。 每次鼠标移动到不同的位置时,ScreenCaptured
事件都会触发。 当鼠标松开事件发生时,EndScreenCapture
事件会触发。
ScreenCaptured
事件将两个参数传递给监听器
private void eyeDropper1_ScreenCaptured(Bitmap capturedPixels, Color capturedColor)
{
}
当我在开发类似 Photoshop 的颜色拾取器时,前几天就派上了用场。 如果您不熟悉 Photoshop,颜色拾取器界面上有两个面板:一个面板显示原始颜色,另一个面板显示对原始颜色所做的更改。 我认为界面看起来更具吸引力,可以在顶部面板中显示捕获的像素颜色,并在底部(原始颜色)面板中绘制捕获的像素。
如果您对已讨论的任何功能仍有疑问,我鼓励您下载演示项目。 有了它,您就可以以可视化的方式轻松更改滴管的所有相关属性。
就这些了! 我相信您会在自己的项目中发现这篇文章有所帮助。 请花时间对这篇文章进行评分,因为这是我获得关于它有多大帮助的唯一反馈。