/// <inheritdoc/> public void Serialize(BufferWriter writer, Image instance, SerializationContext context) { // Note: encoder instances are created here because they may have thread affinity. IBitmapEncoder encoder = null; switch (this.CompressionMethod) { case CompressionMethod.JPEG: encoder = new JpegBitmapEncoder { QualityLevel = 90 }; break; case CompressionMethod.PNG: encoder = new PngBitmapEncoder(); break; case CompressionMethod.None: break; } if (encoder != null) { using (var sharedEncodedImage = EncodedImagePool.GetOrCreate()) { sharedEncodedImage.Resource.EncodeFrom(instance, encoder.Encode); Serializer.Serialize(writer, sharedEncodedImage, context); } } else { Serializer.Serialize(writer, instance, context); } }
/// <summary> /// Compresses an image using the specified encoder /// </summary> /// <param name="image">Image to compress</param> /// <param name="encoder">Encoder to use to compress</param> public void EncodeFrom(Image image, IBitmapEncoder encoder) { this.stream.Position = 0; encoder.Encode(image, this.stream); this.stream.Flush(); this.Width = image.Width; this.Height = image.Height; this.CountBytes = (int)this.stream.Position; this.stream.Position = 0; }
public _MJpegAviEncoder(int width, int height, IBitmapEncoder encoder) { // Argument.IsPositive(width, nameof(width)); // Argument.IsPositive(height, nameof(height)); // Argument.IsInRange(quality, 1, 100, nameof(quality)); this.width = width; this.height = height; jpegEncoder = encoder; buffer = new MemoryStream(MaxEncodedSize); }
/// <summary> /// Given an image and stream, this method will compress the image using /// the compression method set in Initialize() /// </summary> /// <param name="writer">Stream to write compressed image to</param> /// <param name="instance">Image to be compressed</param> /// <param name="context">Serialization context</param> public void Serialize(BufferWriter writer, Image instance, SerializationContext context) { IBitmapEncoder encoder = null; switch (this.compressionMethod) { case Image.CustomSerializer.CompressionMethod.JPEG: encoder = new JpegBitmapEncoder { QualityLevel = 90 }; break; case Image.CustomSerializer.CompressionMethod.PNG: encoder = new PngBitmapEncoder(); break; } using (var sharedEncodedImage = EncodedImagePool.GetOrCreate()) { sharedEncodedImage.Resource.EncodeFrom(instance, encoder); Serializer.Serialize(writer, sharedEncodedImage, context); } }
public static IBitmapEncoder CreateRef(this IBitmapEncoder objectRef) => ((IBitmapEncoder)objectRef.CreateRef(typeof(IBitmapEncoder)));
public static MJpegAviFrameWriter AddVideoFrameWriter(AviWriter aviWriter, int width, int height, IBitmapEncoder encoder) { // Argument.IsNotNull(writer, nameof(writer)); // Argument.IsPositive(width, nameof(width)); // Argument.IsPositive(height, nameof(height)); // Argument.IsInRange(quality, 1, 100, nameof(quality)); var mjpegEncoder = new _MJpegAviEncoder(width, height, encoder); var videoStream = aviWriter.AddEncodingVideoStream(mjpegEncoder, true, width, height); return(new MJpegAviFrameWriter(videoStream)); }
public static void SaveToAVI(string filePath, IEnumerable <MemoryBitmap> frames, decimal fps, IBitmapEncoder jpgEncoder) { MJpegAviFrameWriter writer = null; System.Drawing.Size frameSize = System.Drawing.Size.Empty; using (var avi = new AviWriter(filePath)) { avi.FramesPerSecond = fps; foreach (var frame in frames) { if (frameSize.IsEmpty) { frameSize = frame.Size; } else if (frame.Size != frameSize) { throw new ArgumentException("all frames must have the same size.", nameof(frames)); } if (writer == null) { writer = AddVideoFrameWriter(avi, frame.Width, frame.Height, jpgEncoder); } writer.WriteFrame(frame); } } }