Сохранение данных изображения задания факса - PullRequest
0 голосов
/ 15 октября 2010

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

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

</p> <pre> 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); } </pre> <p>

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

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

1 Ответ

0 голосов
/ 15 октября 2010

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

...