使用给定的hDC将空格添加到图像的顶部

时间:2012-10-31 20:14:40

标签: c# image image-processing gdi+ kofax

布局:

我正在使用第三方控件来扫描文档。我有扫描图像时发生的事件(主要用于添加图像注释)。该活动仅向我提供了一个名为 .PAhDC 的属性。此属性是DC的句柄,用于在将图像写入文件之前存储该图像。因此,我可以在将图像写入文件之前对其进行更改。

预期结果:

我想在图像的最顶部添加1/4英寸(比如100像素)的白色空格线。如果我的原始图像是200x200(WxH),那么我的新最终图像需要为200x300。

问题和其他想法:

如何只知道它的DC手柄,我怎么改变现有的图像?我正在考虑做以下事情......

  1. 创建新DC。
  2. 创建比原始图像高100像素的新位图。
  3. 在新DC中使用该新位图。
  4. 将原始图像复制到新位图(从顶部起100个像素作为起点)。
  5. 然后使用类似SelectObject的东西将原始hDC中的旧位图替换为新位图,然后销毁旧的位图对象。
  6. 注意:我希望尽可能使用MANAGED CODE执行此操作。使用SelectObject()是我能想到的唯一方法,但它当然是非托管代码...:/

2 个答案:

答案 0 :(得分:0)

当然,您可以在托管代码中执行此操作。所有P / Invoke声明都可以从任何体面的搜索引擎中获得。

  • 创建新DC时,请确保它与原始DC兼容
  • 创建新位图时,请确保它与DC
  • 兼容

答案 1 :(得分:0)

您无法与位图和DC的所有者合作。

DeviceContext纯粹是底层DIB /位图的视口,没有大小或尺寸的概念(超出裁剪区域)虽然你可以创建一个新的位图并将其选择到DC中,但很可能应用程序将忽略您已完成的操作并使用它创建的DIB。 最终结果将是GDI对象泄漏,并且不会更改底层图像。

要做你要求的事情,你需要与其他代码完全合作,并添加一个允许你替换基础数据的方法。