0

我正在使用 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);
}

它似乎运行良好,因为返回了图像宽度和高度,并且 byte[] 包含图像数据。

非常感谢任何想法。

4

1 回答 1

0

我无法找到 WinFax.dll 的文档 - 所以我建议的第一件事是在调用 Marshal.Copy 之前用 0 填充缓冲区 - 然后你会确定缓冲区是否被填充。如果它正在被填充,那么您将需要查看文件中的二进制数据,试图猜测它的格式 - 您正在尝试识别标题数据。如果没有标题数据,只有图形,则需要添加一些标题信息。如果我能找到 WinFax 文档,那里可能会有更多线索。

于 2010-10-15T11:00:30.403 回答