Ejemplo n.º 1
0
        private static ProcessImageResult processImage(PipelineContext ctx, Stream ostm)
        {
            var frame = (WicImageFrame)ctx.ImageContainer.GetFrame(ctx.Settings.FrameIndex);

            ctx.ImageFrame = frame;
            ctx.Source     = frame.Source;
            ctx.FinalizeSettings();

            WicTransforms.AddColorProfileReader(ctx);
            WicTransforms.AddNativeScaler(ctx);
            WicTransforms.AddExifFlipRotator(ctx);
            WicTransforms.AddCropper(ctx);
            WicTransforms.AddPixelFormatConverter(ctx);
            WicTransforms.AddHybridScaler(ctx);
            WicTransforms.AddScaler(ctx);
            WicTransforms.AddColorspaceConverter(ctx);
            MagicTransforms.AddMatte(ctx);
            MagicTransforms.AddPad(ctx);
            WicTransforms.AddIndexedColorConverter(ctx);

            var enc = new WicEncoder(ctx, ostm.AsIStream());

            enc.WriteSource(ctx);

            return(new ProcessImageResult(ctx.UsedSettings, ctx.Stats));
        }
Ejemplo n.º 2
0
        private static ProcessImageResult processImage(WicDecoder dec, WicProcessingContext ctx, Stream ostm)
        {
            var frm = new WicFrameReader(ctx);

            WicTransforms.AddMetadataReader(ctx);

            ctx.FinalizeSettings();

            WicTransforms.AddNativeScaler(ctx);
            WicTransforms.AddExifRotator(ctx);
            WicTransforms.AddConditionalCache(ctx);
            WicTransforms.AddCropper(ctx);
            WicTransforms.AddPixelFormatConverter(ctx);
            WicTransforms.AddScaler(ctx);
            WicTransforms.AddColorspaceConverter(ctx);
            MagicTransforms.AddMatte(ctx);
            MagicTransforms.AddPad(ctx);
            WicTransforms.AddIndexedColorConverter(ctx);

            var enc = new WicEncoder(ctx, ostm.AsIStream());

            enc.WriteSource(ctx);

            return(new ProcessImageResult {
                Settings = ctx.UsedSettings, Stats = ctx.Stats
            });
        }
Ejemplo n.º 3
0
        private static void processImage(WicDecoder dec, WicProcessingContext ctx, Stream ostm)
        {
            using (var frm = new WicFrameReader(dec, ctx))
                using (var met = new WicMetadataReader(frm))
                {
                    if (!ctx.Settings.Normalized)
                    {
                        ctx.Settings.Fixup((int)ctx.Width, (int)ctx.Height, ctx.IsRotated90);
                    }

                    ctx.Settings.HybridMode = HybridScaleMode.Turbo;
                    //ctx.NeedsCache = true;

                    using (var qsc = new WicNativeScaler(met))
                        using (var rot = new WicExifRotator(qsc))
                            using (var cac = new WicConditionalCache(rot))
                                using (var crp = new WicCropper(cac))
                                    using (var pix = new WicPixelFormatConverter(crp))
                                        using (var cmy = new WicCmykConverter(pix))
                                            using (var res = new WicScaler(cmy))
                                                using (var csc = new WicColorspaceConverter(res))
                                                    using (var mat = new WicMatteTransform(csc))
                                                        using (var pal = new WicPaletizer(mat, 256))
                                                            using (var enc = new WicEncoder(ostm.AsIStream(), ctx))
                                                                enc.WriteSource(pal);
                }
        }
Ejemplo n.º 4
0
#pragma warning restore 1573

        internal static ProcessImageResult WriteOutput(PipelineContext ctx, Stream ostm)
        {
            MagicTransforms.AddExternalFormatConverter(ctx);
            WicTransforms.AddIndexedColorConverter(ctx);

            var enc = new WicEncoder(ctx, ostm.AsIStream());

            enc.WriteSource(ctx);

            return(new ProcessImageResult(ctx.UsedSettings, ctx.Stats));
        }
Ejemplo n.º 5
0
        private static ProcessImageResult executePipeline(WicProcessingContext ctx, Stream ostm)
        {
            WicTransforms.AddIndexedColorConverter(ctx);

            var enc = new WicEncoder(ctx, ostm.AsIStream());

            enc.WriteSource(ctx);

            return(new ProcessImageResult {
                Settings = ctx.UsedSettings, Stats = ctx.Stats
            });
        }
        public static void ProcessImage(WicTransform prev, WicProcessingContext ctx, Stream ostm)
        {
            bool savePlanar = ctx.Settings.SaveFormat == FileFormat.Jpeg && ctx.SourceColorContext == null;

            using (var rot = new WicExifRotator(prev))
                using (var pln = new WicPlanarCache(rot))
                    using (var ply = new WicPlanarSplitter(pln, WicPlane.Luma))
                        using (var lll = new WicConvertToCustomPixelFormat(ply))
                            using (var mmm = new WicHighQualityScaler(lll))
                                using (var ggg = new WicConvertFromCustomPixelFormat(mmm))
                                    using (var sss = new WicUnsharpMask(ggg))

                                        using (var enc = new WicEncoder(ostm.AsIStream(), ctx))
                                            using (var plc = new WicPlanarSplitter(pln, WicPlane.Chroma))
                                            {
                                                if (savePlanar)
                                                {
                                                    var subsample = ctx.Settings.JpegSubsampleMode;
                                                    if (subsample == ChromaSubsampleMode.Subsample420)
                                                    {
                                                        ctx.Settings.Height = (int)Math.Ceiling(ctx.Settings.Height / 2d);
                                                    }

                                                    if (subsample == ChromaSubsampleMode.Subsample420 || subsample == ChromaSubsampleMode.Subsample422)
                                                    {
                                                        ctx.Settings.Width = (int)Math.Ceiling(ctx.Settings.Width / 2d);
                                                    }

                                                    using (var fff = new WicConvertToCustomPixelFormat(plc))
                                                        using (var res = new WicHighQualityScaler(fff))
                                                            using (var bbb = new WicConvertFromCustomPixelFormat(res))
                                                                using (var pen = new WicPlanarEncoder(enc))
                                                                    pen.WriteSource(sss, bbb);
                                                }
                                                else
                                                {
                                                    using (var fff = new WicConvertToCustomPixelFormat(plc))
                                                        using (var res = new WicHighQualityScaler(fff))
                                                            using (var bbb = new WicConvertFromCustomPixelFormat(res))
                                                                using (var con = new WicPlanarConverter(sss, bbb))
                                                                    using (var pal = new WicPaletizer(con))
                                                                        enc.WriteSource(pal);
                                                }
                                            }
        }
Ejemplo n.º 7
0
        private static void processImage(WicDecoder dec, WicProcessingContext ctx, Stream ostm)
        {
            using (var frm = new WicFrameReader(dec, ctx))
                using (var met = new WicMetadataReader(frm))
                {
                    if (!ctx.Settings.Normalized)
                    {
                        ctx.Settings.Fixup((int)ctx.Width, (int)ctx.Height, ctx.IsRotated90);
                    }

                    bool mod1   = (!ctx.IsSubsampled || ctx.Settings.HybridScaleRatio > 1d || (ctx.Settings.Crop.Width % 2 == 0 && ctx.Settings.Crop.Height % 2 == 0) || (ctx.Settings.Crop.Width == ctx.Width && ctx.Settings.Crop.Height == ctx.Height));
                    bool planar = ctx.SupportsPlanar && mod1;
                    if (planar && ctx.Settings.HybridMode != HybridScaleMode.Off)
                    {
                        MagicPlanarImageProcessor.ProcessImage(met, ctx, ostm);
                        return;
                    }

                    using (var qsc = new WicNativeScaler(met))
                        using (var rot = new WicExifRotator(qsc))
                            using (var cac = new WicConditionalCache(rot))
                                using (var crp = new WicCropper(cac))
                                    using (var pix = new WicPixelFormatConverter(crp))
                                        using (var cmy = new WicCmykConverter(pix))
                                            using (var res = new WicScaler(cmy, true))
                                                using (var lll = new WicGammaExpand(res))
                                                    using (var mmm = new WicHighQualityScaler(lll))
                                                        using (var mat = new WicMatteTransform(mmm))
                                                            using (var ggg = new WicGammaCompress(mat))
                                                                using (var csc = new WicColorspaceConverter(ggg))
                                                                    using (var sss = new WicUnsharpMask(csc))
                                                                        using (var dit = new WicPaletizer(sss, 256))
                                                                            using (var enc = new WicEncoder(ostm.AsIStream(), ctx))
                                                                                enc.WriteSource(dit);
                }
        }
        private static void processImage(WicDecoder dec, WicProcessingContext ctx, Stream ostm)
        {
            using (var frm = new WicFrameReader(dec, ctx))
                using (var met = new WicMetadataReader(frm))
                {
                    if (!ctx.Settings.Normalized)
                    {
                        ctx.Settings.Fixup((int)ctx.Width, (int)ctx.Height, ctx.IsRotated90);
                    }

                    if (EnablePlanarPipeline && ctx.SupportsPlanar)
                    {
                        MagicPlanarImageProcessor.ProcessImage(met, ctx, ostm);
                        return;
                    }

                    using (var qsc = new WicNativeScaler(met))
                        using (var rot = new WicExifRotator(qsc))
                            using (var cac = new WicConditionalCache(rot))
                                using (var crp = new WicCropper(cac))
                                    using (var pix = new WicPixelFormatConverter(crp))
                                        using (var cmy = new WicCmykConverter(pix))
                                            using (var res = new WicScaler(cmy, true))
                                                using (var lll = new WicConvertToCustomPixelFormat(res))
                                                    using (var mmm = new WicHighQualityScaler(lll))
                                                        using (var mat = new WicMatteTransform(mmm))
                                                            using (var ggg = new WicConvertFromCustomPixelFormat(mat))
                                                                using (var csc = new WicColorspaceConverter(ggg))
                                                                    using (var sss = new WicUnsharpMask(csc))
                                                                        using (var dit = new WicPaletizer(sss))
                                                                            using (var enc = new WicEncoder(ostm.AsIStream(), ctx))
                                                                                enc.WriteSource(dit);
                }
        }
Ejemplo n.º 9
0
 public WicPlanarEncoder(WicEncoder enc)
 {
     Encoder     = enc.Encoder;
     Frame       = enc.Frame;
     PlanarFrame = enc.Frame as IWICPlanarBitmapFrameEncode;
 }