【问题标题】:Delphi Wacom SDK德尔福 Wacom SDK
【发布时间】:2016-05-26 09:34:24
【问题描述】:

最近我的公司购买了一个 Wacom STU-530 签名板,我必须实现一个从中获取客户签名并创建带有签名的 pdf 的程序。 我使用 FastReport 实现 PDF,但我需要从 wacom 数位板获取签名。 使用 sdk 我实现了这段代码:

procedure TfrmMain.btnFirmaClick(Sender: TObject);
var
  objFirma: SigObj;
  ctlFirma: TSigCtl;
  picFirma: TPicture;
  res: CaptureResult;
begin
  picFirma := TPicture.Create;
  ctlFirma := TSigCtl.Create(Self);
  res := ctlFirma.Capture('Firmare per accettazione',
    'Formazione del personale in affiancamento');
  case res of
    CaptureOK: begin
      objFirma := SigObj(ctlFirma.Signature);
      SetOlePicture(picFirma, objFirma.Picture(300, 300, 'image/bmp', 0.5, $000000,
        $ffffff, -1.0, -1.0, RenderOutputPicture or RenderColor32BPP or
        RenderEncodeData));
      picFirma.SaveToFile('firma.bmp');
    end;
  end;
  ctlFirma.Free;
  picFirma.Free;
end;

SigObj 有一个返回 IPictureDisp 的方法,我需要将其转换为 TImage,所以我使用了 SetOlePicture,但是当我保存图像时,它是不可读的。如果我尝试用

保存图片
picFirma.bitmap.SaveToFile('firma.bmp')  

生成的位图是无效的。 我的代码有什么问题?

【问题讨论】:

  • 我认为你需要向供应商询问这个问题。他们应该为您提供如何实现您想要的目标的示例。
  • 问题不是Wacom SDK,而是它返回的IPictureDisp。 SetOlePicture 应该将 IPictureDisp 对象连接到 TPicture 对象,但是当我将图像保存在文件上时,它不可读或为空。
  • @Eros RBK 可能是对的;确实,并非所有库都执行正确的 iPictureDisp 实现,甚至 Microsoft 自己也没有正确实现它 - 请参阅 stackoverflow.com/a/480350/976391 询问供应商,尝试从他们那里获取示例代码
  • 关于 IPictureDisp 的 MSDN 说了两件有趣的事情:1)它具有 PICTYPE 类型的 Type 属性,可以是 bitmap 或其他任何东西,包括 non-initialized 类型存根:msdn.microsoft.com/ru-ru/library/windows/desktop/ms687195.aspx 和 2)通常具有 IPictureDisp 接口的对象也确实实现了具有本机 SaveToFile 方法 msdn.microsoft.com/ru-ru/library/windows/desktop/ms694504.aspx 的 IPicture 接口。
  • 如果您的 Delphi 仍然带有 Vcl.AxCtrls 单元的源代码,请尝试进入并调试 SetOlePicture 的内部结构,这可能会提示您哪个假设出错了

标签: delphi sdk wacom


【解决方案1】:

根据 Signature SDK 提供的 Signature Components API 来获取位图中的签名,您应该使用 RenderBitmap 方法。

RenderBitmap(outputFilename, dimensionX, dimensionY, mimeType, inkWidth, nkColor, backgroundColor, paddingX, paddingY, flags)
渲染签名的图像,创建图像文件或返回 二进制数据。可选地对生成的 SigObj 数据进行编码 使用隐写技术的图像。

    objFirma:= SigObj(ctlFirma.Signature);
    objFirma.RenderBitmap('firma.bmp', 300, 300, 'image/bmp', 0.5, $000000,
    $ffffff, -1.0, -1.0, RenderOutputFilename or RenderColor32BPP or RenderEncodeData);

【讨论】:

  • 一些信息丰富的文本会很好,因为只有代码的答案经常被否决。
  • 感谢您的建议。答案已编辑。
【解决方案2】:

在当前版本的 Wacom 签名 SDK 4.5.6 中,您的代码可以正常工作。

【讨论】:

猜你喜欢
  • 2014-07-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-02
  • 2011-10-04
  • 2012-12-13
  • 1970-01-01
相关资源
最近更新 更多