private void loadInfo(WicDecoder dec, WicProcessingContext ctx) { ContainerType = FileFormat.Unknown; if (ctx.ContainerFormat == Consts.GUID_ContainerFormatJpeg) { ContainerType = FileFormat.Jpeg; } else if (ctx.ContainerFormat == Consts.GUID_ContainerFormatPng) { ContainerType = FileFormat.Png; } else if (ctx.ContainerFormat == Consts.GUID_ContainerFormatGif) { ContainerType = FileFormat.Gif; } else if (ctx.ContainerFormat == Consts.GUID_ContainerFormatBmp) { ContainerType = FileFormat.Bmp; } else if (ctx.ContainerFormat == Consts.GUID_ContainerFormatTiff) { ContainerType = FileFormat.Tiff; } Frames = new FrameInfo[ctx.ContainerFrameCount]; for (int i = 0; i < ctx.ContainerFrameCount; i++) { ctx.Settings.FrameIndex = i; using (var frm = new WicFrameReader(dec, ctx)) using (var met = new WicMetadataReader(frm, basicOnly: true)) { Frames[i] = new FrameInfo((int)ctx.Width, (int)ctx.Height, ctx.IsRotated90, ctx.HasAlpha); } } }
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 }); }
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); } }
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); } }
private void loadInfo(WicDecoder dec, WicProcessingContext ctx) { ContainerType = ctx.Decoder.ContainerFormat; Frames = new FrameInfo[ctx.Decoder.FrameCount]; for (int i = 0; i < ctx.Decoder.FrameCount; i++) { ctx.Settings.FrameIndex = i; var frm = new WicFrameReader(ctx); WicTransforms.AddMetadataReader(ctx, basicOnly: true); int width = (int)(frm.ExifOrientation.RequiresDimensionSwap() ? ctx.Source.Height : ctx.Source.Width); int height = (int)(frm.ExifOrientation.RequiresDimensionSwap() ? ctx.Source.Width : ctx.Source.Height); Frames[i] = new FrameInfo(width, height, ctx.Source.Format.AlphaRepresentation != PixelAlphaRepresentation.None, frm.ExifOrientation); } }
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 buildPipeline(WicProcessingContext ctx, bool outputPlanar = true) { var frm = new WicFrameReader(ctx, EnablePlanarPipeline); WicTransforms.AddMetadataReader(ctx); ctx.FinalizeSettings(); ctx.Settings.UnsharpMask = ctx.UsedSettings.UnsharpMask; ctx.Settings.JpegQuality = ctx.UsedSettings.JpegQuality; ctx.Settings.JpegSubsampleMode = ctx.UsedSettings.JpegSubsampleMode; if (ctx.DecoderFrame.SupportsPlanarPipeline) { bool savePlanar = outputPlanar && ctx.Settings.SaveFormat == FileFormat.Jpeg && ctx.Settings.InnerRect == ctx.Settings.OuterRect && ctx.SourceColorContext is null; WicTransforms.AddExifRotator(ctx); WicTransforms.AddPlanarCache(ctx); MagicTransforms.AddHighQualityScaler(ctx); MagicTransforms.AddUnsharpMask(ctx); MagicTransforms.AddExternalFormatConverter(ctx); ctx.SwitchPlanarSource(WicPlane.Chroma); if (savePlanar) { var subsample = ctx.Settings.JpegSubsampleMode; if (subsample == ChromaSubsampleMode.Subsample420) { ctx.Settings.InnerRect.Height = (int)Math.Ceiling(ctx.Settings.InnerRect.Height / 2d); } if (subsample == ChromaSubsampleMode.Subsample420 || subsample == ChromaSubsampleMode.Subsample422) { ctx.Settings.InnerRect.Width = (int)Math.Ceiling(ctx.Settings.InnerRect.Width / 2d); } } MagicTransforms.AddHighQualityScaler(ctx); MagicTransforms.AddExternalFormatConverter(ctx); ctx.SwitchPlanarSource(WicPlane.Luma); if (!savePlanar) { WicTransforms.AddPlanarConverter(ctx); MagicTransforms.AddColorspaceConverter(ctx); MagicTransforms.AddPad(ctx); } } else { WicTransforms.AddNativeScaler(ctx); WicTransforms.AddExifRotator(ctx); WicTransforms.AddConditionalCache(ctx); WicTransforms.AddCropper(ctx); MagicTransforms.AddHighQualityScaler(ctx, true); WicTransforms.AddPixelFormatConverter(ctx); WicTransforms.AddScaler(ctx, true); MagicTransforms.AddHighQualityScaler(ctx); MagicTransforms.AddColorspaceConverter(ctx); MagicTransforms.AddMatte(ctx); MagicTransforms.AddUnsharpMask(ctx); MagicTransforms.AddPad(ctx); } }