Сохранение данных изображения задания факса

Я использую WinFax.dll для отправки и получения факсов в своем приложении, и на данный момент он работает довольно хорошо. Проблема в том, что я хочу сохранить информацию об изображении в FaxJob, но вывод не является распознаваемым форматом.

Я пробовал с Tiff, Gif, Bmp, Png и Jpg, но это не работает, поэтому я подумал, что, возможно, есть проблема в том, как я это делаю. Вот исходный код, который я использовал для получения изображения:

public class FaxJob
{
   public Image GetImage()
   {
      uint width;
      uint height;
      uint size;
      byte[] data;
      IntPtr buffer;

      if (NativeMethods.FaxGetPageData(this.Server.faxHandle, this.id, out buffer, out size, out width, out height) == false)
         throw FaxTools.CreateFaxException(string.Empty);

      data = new byte[size];

      Marshal.Copy(buffer, data, 0, Convert.ToInt32(size));

      var ms = new MemoryStream();
      ms.Write(data, 0, data.Length);

      var img = Image.FromStream(ms);

      return img;
   }
}

internal class NativeMethods
{
   [DllImport("WinFax.dll", SetLastError = true, EntryPoint = "FaxGetPageData")]
   [return: MarshalAs(UnmanagedType.Bool)]
   internal static extern bool FaxGetPageData(IntPtr FaxHandle, uint JobId, out IntPtr Buffer, out uint BufferSize, out uint ImageWidth, out uint ImageHeight);
}

Кажется, он работает хорошо, поскольку возвращаются ширина и высота изображения, а байт [] содержит данные изображения.

Любая идея очень ценится.


person Hadi Eskandari    schedule 15.10.2010    source источник


Ответы (1)


У меня возникли проблемы с поиском документа для WinFax.dll, поэтому первое, что я бы посоветовал, это заполнить буфер нулями перед вызовом Marshal.Copy, тогда вы точно будете знать, заполняется ли буфер. Если он заполняется, то вам нужно будет посмотреть бинарные данные в файле, пытаясь угадать, в каком он формате - вы пытаетесь распознать данные заголовка. Если нет данных заголовка, только графика, вам нужно будет добавить некоторую информацию заголовка. Если бы я мог найти документы WinFax, там могло бы быть больше подсказок.

person Jeff    schedule 15.10.2010