public static FileHandle FromStream(Stream stream, int count = 0) { if (count <= 0) { count = (int)(stream.Length - stream.Position); } var start = stream.Position; byte[] data = null; var fileRead = new FileHandle(count, (ignore, position, buffer, size) => { if (!stream.CanRead) { return(false); } stream.Position = start + position; if (data == null || data.Length < size) { data = new byte[size]; } if (stream.Read(data, 0, (int)size) != size) { return(false); } Marshal.Copy(data, 0, buffer, (int)size); return(true); }); GC.KeepAlive(fileRead); return(fileRead); }
internal static int FPDFImageObjLoadJpegFile(FpdfPageT pages, int nCount, FpdfPageobjectT image_object, FileHandle fileAccess) { unsafe { var array = new[] { pages.__Instance }; fixed(IntPtr *dataPtr = &array[0]) { return(FPDFImageObjLoadJpegFileInternal(dataPtr, nCount, image_object.__Instance, fileAccess)); } } }
internal static extern unsafe int FPDFImageObjLoadJpegFileInternal(IntPtr *pages, int nCount, IntPtr image_object, FileHandle fileAccess);