Beispiel #1
0
        public virtual long CopyTo(InteropValues.IStream pstm, long cb, long[] pcbRead)
        {
            const int bufsize = 4096;
            var       buffer  = Marshal.AllocHGlobal(bufsize);

            if (buffer == IntPtr.Zero)
            {
                throw new OutOfMemoryException();
            }
            long written = 0;

            try
            {
                while (written < cb)
                {
                    var toRead = bufsize;
                    if (written + toRead > cb)
                    {
                        toRead = (int)(cb - written);
                    }
                    var read = Read(buffer, toRead);
                    if (read == 0)
                    {
                        break;
                    }
                    if (pstm.Write(buffer, read) != read)
                    {
                        throw EFail("Wrote an incorrect number of bytes");
                    }
                    written += read;
                }
            }
            finally
            {
                Marshal.FreeHGlobal(buffer);
            }
            if (pcbRead != null && pcbRead.Length > 0)
            {
                pcbRead[0] = written;
            }

            return(written);
        }
Beispiel #2
0
 internal static extern int GdipSaveImageToStream(HandleRef image, InteropValues.IStream stream, ref Guid classId, HandleRef encoderParams);
Beispiel #3
0
 internal static extern int GdipCreateBitmapFromStream(InteropValues.IStream stream, out IntPtr bitmap);