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); } }
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); } } }
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); } }