Пакет SDK для Delphi Wacom

недавно моя компания купила блокнот для подписи 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')  

результирующее растровое изображение является недействительным. Что не так в моем коде?


person Eros    schedule 26.05.2016    source источник
comment
Думаю, вам нужно спросить об этом продавца. Они должны предоставить вам пример того, как достичь того, чего вы хотите.   -  person RBA    schedule 26.05.2016
comment
Проблема не в Wacom SDK, а в возвращаемом им IPictureDisp. SetOlePicture Должен соединять объект IPictureDisp с объектом TPicture, но когда я сохраняю изображение в файле, он не читается или пуст.   -  person Eros    schedule 26.05.2016
comment
@Eros RBK может быть прав; Действительно, не все библиотеки делают правильную реализацию iPictureDisp, даже сами Microsoft не реализуют ее правильно - см. Спросите поставщика, попробуйте получить от него образец кода   -  person Arioch 'The    schedule 26.05.2016
comment
MSDN про IPictureDisp говорит две интересные вещи: 1) у него есть свойство Type типа PICTYPE, которое может быть bitmap или любым другим, включая non-initialized type-stub: msdn.microsoft.com/ru-ru/library/windows/desktop/ms687195.aspx и 2) обычно объекты с интерфейсом IPictureDisp также реализуют Интерфейс IPicture со встроенным методом SaveToFile msdn.microsoft.com/ ru-ru/library/windows/desktop/ms694504.aspx   -  person Arioch 'The    schedule 26.05.2016
comment
если ваш Delphi все еще поставляется с исходными кодами для модуля Vcl.AxCtrls, попробуйте войти и отладить внутренности SetOlePicture, и это может подсказать вам, какое предположение пошло не так.   -  person Arioch 'The    schedule 26.05.2016


Ответы (1)


В соответствии с API компонентов подписи, поставляемым с SDK подписи, для получения подписи в растровом изображении следует использовать метод 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);
person plxhelpme_kindofuser    schedule 08.09.2016
comment
Немного информативного текста было бы неплохо, поскольку ответы, содержащие только код, часто получают отрицательные голоса. - person LU RD; 08.09.2016
comment
Спасибо, добрый сэр, за ваше предложение. Ответ отредактирован. - person plxhelpme_kindofuser; 09.09.2016