/// <inheritdoc/> public bool TryWrite(Lazy <Stream> stream, CodecFormat format, SpanBitmap bmp) { var fmt = GetFormatFromExtension(format); if (fmt == null) { return(false); } if (!_Implementation.TryGetExactPixelFormat(bmp.PixelFormat, out _)) { using (var tmp = _Implementation.CloneAsGDIBitmap(bmp)) { _WriteBitmap(stream.Value, fmt, tmp); } } else { void _doSave(PointerBitmap ptr) { using (var tmp = _Implementation.WrapOrCloneAsGDIBitmap(ptr)) { _WriteBitmap(stream.Value, fmt, tmp); } } bmp.PinReadablePointer(_doSave); } return(true); }
/// <inheritdoc/> public bool TryWrite(Lazy <Stream> stream, CodecFormat format, SpanBitmap bmp) { try { var fmt = GetFormatFromExtension(format); var clr = _Implementation.ToPixelFormat(Pixel.RGBA32.Format); if (bmp.PixelFormat.Components.Any(item => item.IsLuminance)) { clr = _Implementation.ToPixelFormat(Pixel.Luminance8.Format); } if (clr.Color == SkiaSharp.SKColorType.Unknown) { return(false); } using (var skbmp = _Implementation.CloneAsSKImage(bmp, clr)) { var data = skbmp.Encode(fmt, 95); data.SaveTo(stream.Value); } } catch (ArgumentException) { return(false); } return(true); }
private static SkiaSharp.SKEncodedImageFormat GetFormatFromExtension(CodecFormat xfmt) { switch (xfmt) { case CodecFormat.Astc: return(SkiaSharp.SKEncodedImageFormat.Astc); case CodecFormat.Bmp: return(SkiaSharp.SKEncodedImageFormat.Bmp); case CodecFormat.Dng: return(SkiaSharp.SKEncodedImageFormat.Dng); case CodecFormat.Gif: return(SkiaSharp.SKEncodedImageFormat.Gif); case CodecFormat.Heif: return(SkiaSharp.SKEncodedImageFormat.Heif); case CodecFormat.Icon: return(SkiaSharp.SKEncodedImageFormat.Ico); case CodecFormat.Jpeg: return(SkiaSharp.SKEncodedImageFormat.Jpeg); case CodecFormat.Ktx: return(SkiaSharp.SKEncodedImageFormat.Ktx); case CodecFormat.Pkm: return(SkiaSharp.SKEncodedImageFormat.Pkm); case CodecFormat.Png: return(SkiaSharp.SKEncodedImageFormat.Png); case CodecFormat.Wbmp: return(SkiaSharp.SKEncodedImageFormat.Wbmp); case CodecFormat.Webp: return(SkiaSharp.SKEncodedImageFormat.Webp); default: throw new ArgumentException(); } }
/// <inheritdoc/> public bool TryWrite(Lazy <Stream> stream, CodecFormat format, SpanBitmap bmp) { using (var mat = bmp.WithOpenCv().ToMat()) { mat.WriteToStream(stream.Value, $".{format.ToString().ToLower()}"); } return(true); }
internal static void Write(Lazy <System.IO.Stream> stream, CodecFormat format, IBitmapEncoder[] encoders, SpanBitmap bmp) { if (encoders.Length == 0) { encoders = GetDefaultEncoders().ToArray(); } Guard.NotNull(nameof(stream), stream); Guard.NotNull(nameof(encoders), encoders); Guard.IsFalse(nameof(format), format == CodecFormat.Undefined); Guard.GreaterThan(nameof(encoders), encoders.Length, 0); long position = 0; bool keepOpen = false; // if the stream has been created already, remember the start position. if (stream.IsValueCreated) { Guard.IsTrue(nameof(stream), stream.Value.CanWrite); position = stream.Value.Position; keepOpen = true; } // loop over each encoder: foreach (var encoder in encoders) { if (encoder.TryWrite(stream, format, bmp)) { return; } if (!stream.IsValueCreated) { continue; } if (!keepOpen) { throw new ArgumentException(_CodecError000, nameof(encoders)); } if (stream.Value.Position != position) { if (!stream.Value.CanSeek) { throw new ArgumentException(_CodecError000, nameof(encoders)); } stream.Value.Position = position; } } throw new ArgumentException("invalid format", nameof(format)); }
private static Image DecodeImageFromFile(string path, CodecFormat format) { using var stream = OpenJpeg.StreamCreateDefaultFileStream(path, true); using var codec = OpenJpeg.CreateDecompress(format); using var decompressionParameters = new DecompressionParameters(); OpenJpeg.SetDefaultDecoderParameters(decompressionParameters); OpenJpeg.SetupDecoder(codec, decompressionParameters); OpenJpeg.ReadHeader(stream, codec, out var image); OpenJpeg.SetDecodeArea(codec, image, 0, 0, 0, 0); OpenJpeg.Decode(codec, stream, image); OpenJpeg.EndDecompress(codec, stream); return(image); }
/// <inheritdoc/> public bool TryWrite(Lazy <Stream> stream, CodecFormat format, SpanBitmap bmp) { if (format != CodecFormat.InteropBitmap) { return(false); } using (var w = new System.IO.BinaryWriter(stream.Value, Encoding.UTF8, true)) { WriteRaw(w, bmp, this); } return(true); }
public AwcFormatChunk(DataReader r) { Samples = r.ReadUInt32(); LoopPoint = r.ReadInt32(); SamplesPerSecond = r.ReadUInt16(); Headroom = r.ReadInt16(); LoopBegin = r.ReadUInt16(); LoopEnd = r.ReadUInt16(); PlayEnd = r.ReadUInt16(); PlayBegin = r.ReadByte(); Codec = (CodecFormat)r.ReadByte(); //Apparently sometimes this struct is longer? TODO: fix?? //r.ReadUInt16(); //r.ReadUInt16(); }
/// <inheritdoc/> public bool TryWrite(Lazy <Stream> stream, CodecFormat format, SpanBitmap bmp) { var encoder = CreateEncoder(format); if (encoder == null) { return(false); } var writable = _Implementation.ToWritableBitmap(bmp); var frame = System.Windows.Media.Imaging.BitmapFrame.Create(writable); encoder.Frames.Add(frame); encoder.Save(stream.Value); return(true); }
/// <inheritdoc/> public bool TryWrite(Lazy <Stream> stream, CodecFormat format, SpanBitmap bmp) { var fmt = _GetFormatFromExtension(format); if (fmt == null) { return(false); } using var dst = bmp.Info.ToAndroidFactory().CreateCompatibleBitmap(); bmp.CopyTo(dst); dst.Compress(fmt, 100, stream.Value); return(true); }
private static System.Windows.Media.Imaging.BitmapEncoder CreateEncoder(CodecFormat format) { // TODO: System.Windows.Media.Imaging.WmpBitmapEncoder() switch (format) { case CodecFormat.Bmp: return(new System.Windows.Media.Imaging.BmpBitmapEncoder()); case CodecFormat.Jpeg: return(new System.Windows.Media.Imaging.JpegBitmapEncoder()); case CodecFormat.Png: return(new System.Windows.Media.Imaging.PngBitmapEncoder()); case CodecFormat.Gif: return(new System.Windows.Media.Imaging.GifBitmapEncoder()); case CodecFormat.Tiff: return(new System.Windows.Media.Imaging.TiffBitmapEncoder()); default: return(null); } }
private static GDIIMAGEFORMAT GetFormatFromExtension(CodecFormat format) { switch (format) { case CodecFormat.Png: return(GDIIMAGEFORMAT.Png); case CodecFormat.Jpeg: return(GDIIMAGEFORMAT.Jpeg); case CodecFormat.Tiff: return(GDIIMAGEFORMAT.Tiff); case CodecFormat.Icon: return(GDIIMAGEFORMAT.Icon); case CodecFormat.Gif: return(GDIIMAGEFORMAT.Gif); case CodecFormat.Bmp: return(GDIIMAGEFORMAT.Bmp); case CodecFormat.Emf: return(GDIIMAGEFORMAT.Emf); case CodecFormat.Wmf: return(GDIIMAGEFORMAT.Wmf); default: return(null); } }
/// <inheritdoc/> public bool TryWrite(Lazy <Stream> stream, CodecFormat format, SpanBitmap bmp) { var fmt = SixLabors.ImageSharp.Configuration.Default.ImageFormatsManager.FindFormatByFileExtension(format.ToString().ToLower()); if (fmt == null) { return(false); } var encoder = SixLabors.ImageSharp.Configuration.Default.ImageFormatsManager.FindEncoder(fmt); if (encoder == null) { return(false); } using (var img = _Implementation.CloneToImageSharp(bmp)) { img.Save(stream.Value, encoder); } return(true); }
public static extern IntPtr openjpeg_openjp2_opj_create_decompress(CodecFormat format);
private static Android.Graphics.Bitmap.CompressFormat _GetFormatFromExtension(CodecFormat format) { switch (format) { case CodecFormat.Png: return(Android.Graphics.Bitmap.CompressFormat.Png); case CodecFormat.Jpeg: return(Android.Graphics.Bitmap.CompressFormat.Jpeg); #pragma warning disable CS0618 // Type or member is obsolete case CodecFormat.Webp: return(Android.Graphics.Bitmap.CompressFormat.Webp); #pragma warning restore CS0618 // Type or member is obsolete case CodecFormat.WebpLossy: return(Android.Graphics.Bitmap.CompressFormat.WebpLossy); case CodecFormat.WebpLossless: return(Android.Graphics.Bitmap.CompressFormat.WebpLossless); default: return(null); } }
/// <summary> /// Creates a J2K/JP2 compression structure. /// </summary> /// <param name="format">The codec format to create.</param> /// <returns>The <see cref="Codec"/>.</returns> public static Codec CreateCompress(CodecFormat format) { var ptr = NativeMethods.openjpeg_openjp2_opj_create_compress(format); return(new Codec(ptr)); }
public bool TryWrite(Lazy <Stream> stream, CodecFormat format, SpanBitmap bmp) { if (format == CodecFormat.Png) { if (!_ExtractPixels(bmp, out var rinfo, out var rdata, out var wfmt)) { return(false); } new STBWRITE.ImageWriter().WritePng(rdata, rinfo.Width, rinfo.Height, wfmt, stream.Value); return(true); } if (format == CodecFormat.Jpeg) { if (!_ExtractPixels(bmp, out var rinfo, out var rdata, out var wfmt)) { return(false); } new STBWRITE.ImageWriter().WriteJpg(rdata, rinfo.Width, rinfo.Height, wfmt, stream.Value, _JpegQuality); return(true); } if (format == CodecFormat.Bmp) { if (!_ExtractPixels(bmp, out var rinfo, out var rdata, out var wfmt)) { return(false); } new STBWRITE.ImageWriter().WriteBmp(rdata, rinfo.Width, rinfo.Height, wfmt, stream.Value); return(true); } if (format == CodecFormat.Tga) { if (!_ExtractPixels(bmp, out var rinfo, out var rdata, out var wfmt)) { return(false); } new STBWRITE.ImageWriter().WriteTga(rdata, rinfo.Width, rinfo.Height, wfmt, stream.Value); return(true); } if (format == CodecFormat.Hdr) { if (!_ExtractPixels(bmp, out var rinfo, out var rdata, out var wfmt)) { return(false); } new STBWRITE.ImageWriter().WriteHdr(rdata, rinfo.Width, rinfo.Height, wfmt, stream.Value); return(true); } /* * if (format == CodecFormat.Dds) * { * if (!_ExtractPixels(bmp, out var rinfo, out var rdata, out var wfmt)) return false; * * if (wfmt == STBWRITE.ColorComponents.RedGreenBlueAlpha) * { * var compressedData = STBDIRECTX.StbDxt.CompressDxt5(rinfo.Width, rinfo.Height, rdata); * // write DDS header * // write compressedData * } * }*/ return(false); }