65.9K
CodeProject 正在变化。 阅读更多。
Home

更好的缩放实用程序

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.93/5 (29投票s)

2005年6月17日

4分钟阅读

viewsIcon

84021

downloadIcon

1262

一个更好的 Zoomin 实用程序。

引言

这个项目源于新闻组中的一个问题。有人问如何编写一个拾色器。

很多次,我都需要一个拾色器。我也需要截取屏幕上的图像片段,将其放入其他程序中,例如图标。问题是 ZoomIn 不支持我需要的大部分功能。

Zoomin 有什么问题?

  • 我必须第一次就正确获取图像。如果我没有正确选择它,我就无法微调它。
  • 我必须正确缩放。否则,我可能会得到太多的图像,或者不够。
  • 一旦获得了图像,我就无法选择其中的一部分。
  • 复制到剪贴板会将图像复制到 Zoomin 窗口中,而不是屏幕上的实际像素。

最初的提问者提出了一些处理这个问题的复杂方法,例如使用计时器和钩子函数。这些不是必需的。

这个项目产生的图像与下面显示的图像非常相似

为了创建这个,我将图像大小设置为 64 像素,由顶部的微调控件控制。然后我使用了拾取工具,,并将其拖动到屏幕上,直到我位于页面标题中的灯泡上方。我还没有完全到达我想要的位置,所以我使用“微调”箭头稍微移动了一下。

在移动过程中,右上角会显示一个 RGB 值。此外,还会显示实际的 R、G 和 B 颜色。这代表光标放置的实际点(尽管您可能看不到它,拾取工具的中间有一个很小的白色点,代表光标热点位置)。在展开的图像上看到这一点的方式是,中心的点线正方形是热点,已展开。从边缘延伸的线条只是为了使其找到它变得有趣。

中间的 ? 键将在所选区域周围显示一个框。

复制图标按钮,,将把所选内容的内容复制到剪贴板。

但是,还有其他附加功能。

一旦捕获了图像,将鼠标移到它上面,将在 RGB 显示屏中显示鼠标下像素的实际像素值。

在图像区域内单击并拖动将选择一个子区域。然后,这将用一个选择矩形标记。请注意,旧的矩形不会消失,直到创建了新的矩形。这是故意的,因此您可以在制作新的、更大或更小的选择时看到旧的选择。

这显示在下图。请注意,此图像较小。我通过调整对话框的大小来做到这一点。在此示例中,灯的底部周围有一个选择框。

这个代码有什么有趣的?

像我的大多数示例一样,这旨在展示一些关于使用 Windows 和/或 MFC 的想法。此代码中包含的想法是

  • 创建覆盖整个桌面窗口的窗口 DC。
  • 抓取窗口的一部分并将其保存为本地位图。
  • 选择该位图的一部分。
  • 橡皮筋选择框。
  • 显示颜色样本。
  • 将位图复制到剪贴板。
  • 拥有一个“拾取”工具(很像您会从 Spy++ 中识别的那样)。
  • 注意到在某些情况下,您可以互换光标和图标,这就是我在这里所做的。
  • 创建一个 CWnd 派生的弹出窗口(? 按钮的实现)。
  • 拥有一个可以创建并在其自身消失的窗口(? 按钮的显示窗口)。
  • 使用隐式 SetBkMode(OPAQUE) 来创建交替颜色的线条,因此无论背景是亮色还是暗色,该线条都会显示出来。
  • 在逻辑空间中计算点并将它们转换为设备空间(用于绘制第一张图像中突出显示正方形的点数组)。请注意,水平和垂直线实际上是逻辑空间中的“分数像素”,并且有一个实现这一点的技巧。
  • 所有者绘制按钮(那些箭头按钮和复制按钮)。

这里没有多少代码,但是这里的代码说明了几种有用的技术。

本文章中表达的观点仅代表作者的观点,并且绝不代表或认可微软的观点。

© . All rights reserved.