Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用给定的hDC向图像顶部添加空白_C#_Image_Image Processing_Gdi+_Kofax - Fatal编程技术网

C# 使用给定的hDC向图像顶部添加空白

C# 使用给定的hDC向图像顶部添加空白,c#,image,image-processing,gdi+,kofax,C#,Image,Image Processing,Gdi+,Kofax,布局: 我正在使用第三方控件扫描文档。扫描图像时会发生一个事件(主要用于在图像中添加注释)。该事件仅为我提供一个名为.PAhDC的属性。此属性是在将图像写入文件之前存储图像的DC的句柄。因此,我可以在图像写入文件之前对其进行更改 预期结果: 我只想在图像的最上面加一条1/4英寸(比如说100像素)的空白线。如果我的原始图像是200x200(WxH),那么我的新最终图像需要是200x300 问题和其他想法: 如何在只知道现有图像的DC句柄的情况下更改该图像?我正在考虑做如下的事情 创建一个新的DC

布局:

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

预期结果:

我只想在图像的最上面加一条1/4英寸(比如说100像素)的空白线。如果我的原始图像是200x200(WxH),那么我的新最终图像需要是200x300

问题和其他想法:

如何在只知道现有图像的DC句柄的情况下更改该图像?我正在考虑做如下的事情

  • 创建一个新的DC
  • 创建比原始图像高100像素的新位图
  • 在新DC中使用该新位图
  • 将原始图像复制到新位图(以距顶部100像素为起点)
  • 然后使用SelectObject之类的方法将原始hDC中的旧位图替换为新位图,然后销毁旧位图对象

  • 注意:我希望尽可能多地使用托管代码。使用SelectObject()是我能想到的唯一方法,但它当然是非托管代码…:/

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

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

    如果没有位图和DC所有者的合作,您将无法使用

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


    要执行您要求的操作,您需要与其他代码充分合作,并添加一个允许您替换底层数据的方法。

    我永远无法让它工作,正如Deanna所说,无论我对DC中的位图做什么(替换或不替换),我的更改都会被忽略,因为“新建”位图在父函数中被忽略。。。或者,我猜是因为当我尝试交换位图时,它发生了不适。