public IntPtr WriteStream(IMagickImage image, MagickSettings settings, ReadWriteStreamDelegate reader, ReadWriteStreamDelegate writer, SeekStreamDelegate seeker, TellStreamDelegate teller)
 {
     using (INativeInstance settingsNative = MagickSettings.CreateInstance(settings))
     {
         IntPtr exception = IntPtr.Zero;
         IntPtr result;
         #if PLATFORM_AnyCPU
         if (NativeLibrary.Is64Bit)
         #endif
         #if PLATFORM_x64 || PLATFORM_AnyCPU
         result = NativeMethods.X64.MagickImageCollection_WriteStream(image.GetInstance(), settingsNative.Instance, reader, writer, seeker, teller, out exception);
         #endif
         #if PLATFORM_AnyCPU
         else
         #endif
         #if PLATFORM_x86 || PLATFORM_AnyCPU
         result = NativeMethods.X86.MagickImageCollection_WriteStream(image.GetInstance(), settingsNative.Instance, reader, writer, seeker, teller, out exception);
         #endif
         MagickException magickException = MagickExceptionHelper.Create(exception);
         if (MagickExceptionHelper.IsError(magickException))
         {
             if (result != IntPtr.Zero)
             {
                 Dispose(result);
             }
             throw magickException;
         }
         RaiseWarning(magickException);
         return(result);
     }
 }
 public IntPtr ReadStream(IMagickSettings <QuantumType> settings, ReadWriteStreamDelegate reader, SeekStreamDelegate seeker, TellStreamDelegate teller)
 {
     using (INativeInstance settingsNative = MagickSettings.CreateInstance(settings))
     {
         IntPtr exception = IntPtr.Zero;
         IntPtr result;
         #if PLATFORM_AnyCPU
         if (OperatingSystem.Is64Bit)
         #endif
         #if PLATFORM_x64 || PLATFORM_AnyCPU
         result = NativeMethods.X64.MagickImageCollection_ReadStream(settingsNative.Instance, reader, seeker, teller, out exception);
         #endif
         #if PLATFORM_AnyCPU
         else
         #endif
         #if PLATFORM_x86 || PLATFORM_AnyCPU
         result = NativeMethods.X86.MagickImageCollection_ReadStream(settingsNative.Instance, reader, seeker, teller, out exception);
         #endif
         var magickException = MagickExceptionHelper.Create(exception);
         if (magickException == null)
         {
             return(result);
         }
         if (magickException is MagickErrorException)
         {
             if (result != IntPtr.Zero)
             {
                 Dispose(result);
             }
             throw magickException;
         }
         RaiseWarning(magickException);
         return(result);
     }
 }
        /// <summary>
        /// Writes the images to the specified buffer writter. If the output image's file format does not
        /// allow multi-image files multiple files will be written.
        /// </summary>
        /// <param name="bufferWriter">The buffer writer to write the images to.</param>
        /// <exception cref="MagickException">Thrown when an error is raised by ImageMagick.</exception>
        public void Write(IBufferWriter <byte> bufferWriter)
        {
            Throw.IfNull(nameof(bufferWriter), bufferWriter);

            if (_images.Count == 0)
            {
                return;
            }

            var settings = GetSettings().Clone();

            settings.FileName = null;

            try
            {
                AttachImages();

                var wrapper = new BufferWriterWrapper(bufferWriter);
                var writer  = new ReadWriteStreamDelegate(wrapper.Write);

                _nativeInstance.WriteStream(_images[0], settings, writer, null, null, null);
            }
            finally
            {
                DetachImages();
            }
        }
Пример #4
0
        /// <summary>
        /// Writes the image to the specified file.
        /// </summary>
        /// <param name="bufferWriter">The buffer writer to write the image to.</param>
        /// <exception cref="MagickException">Thrown when an error is raised by ImageMagick.</exception>
        public void Write(IBufferWriter <byte> bufferWriter)
        {
            Throw.IfNull(nameof(bufferWriter), bufferWriter);

            _settings.FileName = null;

            var wrapper = new BufferWriterWrapper(bufferWriter);
            var writer  = new ReadWriteStreamDelegate(wrapper.Write);

            _nativeInstance.WriteStream(_settings, writer, null, null, null);
        }
Пример #5
0
        private static void DoNativeCompress(Stream input, Stream output, bool progressive, bool lossless, int quality)
        {
            using (StreamWrapper readWrapper = StreamWrapper.CreateForReading(input))
            {
                using (StreamWrapper writeWrapper = StreamWrapper.CreateForWriting(output))
                {
                    ReadWriteStreamDelegate reader = new ReadWriteStreamDelegate(readWrapper.Read);
                    ReadWriteStreamDelegate writer = new ReadWriteStreamDelegate(writeWrapper.Write);

                    var nativeJpegOptimizer = new NativeJpegOptimizer();
                    nativeJpegOptimizer.CompressStream(reader, writer, progressive, lossless, quality);
                }
            }
        }
Пример #6
0
 public static int CompressStream(ReadWriteStreamDelegate reader, ReadWriteStreamDelegate writer, bool progressive, bool lossless, int quality)
 {
     #if PLATFORM_AnyCPU
     if (NativeLibrary.Is64Bit)
     #endif
     #if PLATFORM_x64 || PLATFORM_AnyCPU
     return((int)NativeMethods.X64.JpegOptimizer_CompressStream(reader, writer, progressive, lossless, (UIntPtr)quality));
     #endif
     #if PLATFORM_AnyCPU
     else
     #endif
     #if PLATFORM_x86 || PLATFORM_AnyCPU
     return((int)NativeMethods.X86.JpegOptimizer_CompressStream(reader, writer, progressive, lossless, (UIntPtr)quality));
     #endif
 }
Пример #7
0
            public void CompressStream(ReadWriteStreamDelegate reader, ReadWriteStreamDelegate writer, bool progressive, bool lossless, int quality)
            {
                IntPtr exception = IntPtr.Zero;

                #if PLATFORM_AnyCPU
                if (NativeLibrary.Is64Bit)
                #endif
                #if PLATFORM_x64 || PLATFORM_AnyCPU
                NativeMethods.X64.JpegOptimizer_CompressStream(reader, writer, progressive, lossless, (UIntPtr)quality, out exception);
                #endif
                #if PLATFORM_AnyCPU
                else
                #endif
                #if PLATFORM_x86 || PLATFORM_AnyCPU
                NativeMethods.X86.JpegOptimizer_CompressStream(reader, writer, progressive, lossless, (UIntPtr)quality, out exception);
                #endif
                CheckException(exception);
            }
Пример #8
0
 public void WriteStream(IMagickImage image, MagickSettings settings, ReadWriteStreamDelegate writer, SeekStreamDelegate seeker, TellStreamDelegate teller, ReadWriteStreamDelegate reader)
 {
     using (INativeInstance settingsNative = MagickSettings.CreateInstance(settings))
     {
         IntPtr exception = IntPtr.Zero;
         #if PLATFORM_AnyCPU
         if (NativeLibrary.Is64Bit)
         #endif
         #if PLATFORM_x64 || PLATFORM_AnyCPU
         NativeMethods.X64.MagickImageCollection_WriteStream(image.GetInstance(), settingsNative.Instance, writer, seeker, teller, reader, out exception);
         #endif
         #if PLATFORM_AnyCPU
         else
         #endif
         #if PLATFORM_x86 || PLATFORM_AnyCPU
         NativeMethods.X86.MagickImageCollection_WriteStream(image.GetInstance(), settingsNative.Instance, writer, seeker, teller, reader, out exception);
         #endif
         CheckException(exception);
     }
 }
        private void AddImages(ReadOnlySequence <byte> data, IMagickReadSettings <QuantumType>?readSettings, bool ping)
        {
            if (data.IsSingleSegment)
            {
                AddImages(data.FirstSpan, readSettings, ping);
                return;
            }

            var settings = CreateSettings(readSettings);

            settings.Ping     = ping;
            settings.FileName = null;

            var wrapper = new ReadOnlySequenceWrapper(data);
            var reader  = new ReadWriteStreamDelegate(wrapper.Read);
            var seeker  = new SeekStreamDelegate(wrapper.Seek);
            var teller  = new TellStreamDelegate(wrapper.Tell);

            var result = _nativeInstance.ReadStream(settings, reader, seeker, teller);

            AddImages(result, settings);
        }
 public static extern void MagickImageCollection_WriteStream(IntPtr image, IntPtr settings, ReadWriteStreamDelegate writer, SeekStreamDelegate seeker, TellStreamDelegate teller, ReadWriteStreamDelegate reader, out IntPtr exception);
Пример #11
0
 public static extern void JpegOptimizer_CompressStream(ReadWriteStreamDelegate reader, ReadWriteStreamDelegate writer, [MarshalAs(UnmanagedType.Bool)] bool progressive, [MarshalAs(UnmanagedType.Bool)] bool lossless, UIntPtr quality, out IntPtr exception);