本文整理汇总了C#中ImageResizer.Resizing.ImageState类的典型用法代码示例。如果您正苦于以下问题:C# ImageState类的具体用法?C# ImageState怎么用?C# ImageState使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
ImageState类属于ImageResizer.Resizing命名空间,在下文中一共展示了ImageState类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: LayoutImage
protected override RequestedAction LayoutImage(ImageState s)
{
if (s.sourceBitmap == null) return RequestedAction.None;
//Parse carve data bitmap
if (!string.IsNullOrEmpty(s.settings["carve.data"])) {
string[] parts = s.settings["carve.data"].Split('|');
//Parse block count and string
var block_count = int.Parse(parts[0]);
var carveString = new LzwDecoder("012").Decode(PathUtils.FromBase64UToBytes(parts[1]));
float block_size = (int)Math.Floor(Math.Sqrt(s.originalSize.Width * s.originalSize.Height / (double)block_count));
var carveData = new CarveDataPlotter() {
BlockCount=block_count,
Stride = (int)Math.Ceiling((float)s.originalSize.Width / block_size),
Rows = (int)Math.Ceiling((float)s.originalSize.Height / block_size)
};
carveData.Init(carveString);
Size remove = carveData.GetRemovalSpace(s.originalSize.Width,s.originalSize.Height,(int)block_size);
if (remove.Width / s.originalSize.Width > remove.Height / s.originalSize.Height) {
s.originalSize = new Size(s.originalSize.Width - remove.Width, s.originalSize.Height);
} else {
s.originalSize = new Size(s.originalSize.Width, s.originalSize.Height - remove.Height);
}
//Save later
s.Data[CarveData] = carveData;
}
return RequestedAction.None;
}
示例2: PrepareDestinationBitmap
protected override RequestedAction PrepareDestinationBitmap(ImageState s)
{
if (!this.IsDiagnosticRequest(s.settings)) return RequestedAction.None;
// Rather than allow the normal process, we will throw an
// AlternateResponseException that contains the data we *really*
// want to return.
var info = new LayoutInformation(s);
var serializer = new JsonSerializer();
// Check to see if indented JSON has been requested. This is useful
// for human-readable output.
if (s.settings.Get("j.indented", false))
{
serializer.Formatting = Formatting.Indented;
}
serializer.Converters.Add(new InstructionsConverter());
StringWriter sw = new StringWriter();
serializer.Serialize(sw, info);
var bytes = System.Text.Encoding.UTF8.GetBytes(sw.ToString());
throw new AlternateResponseException(
"Resizing pipeline was canceled as JSON data was requested instead.",
"application/json; charset=utf-8",
bytes);
}
示例3: LayoutImage
protected override RequestedAction LayoutImage(ImageState s)
{
if (s.sourceBitmap == null) return RequestedAction.None;
//percentpadding. Percentage is 0-100, multiplied by the average of the width and height.
double percentpadding = s.settings.Get<double>("trim.percentpadding", 0) / 100;
int? threshold = s.settings.Get<int>("trim.threshold");
if (threshold != null) {
if (threshold < 0) threshold = 0; if (threshold > 255) threshold = 255;
Rectangle box = new BoundingBoxFinder().FindBoxSobel(s.sourceBitmap, new Rectangle(0, 0, s.sourceBitmap.Width, s.sourceBitmap.Height), (byte)threshold);
//Add padding
int paddingPixels = (int)Math.Ceiling(percentpadding * (box.Width + box.Height) / 2);
box.X = Math.Max(0, box.X - paddingPixels);
box.Y= Math.Max(0, box.Y - paddingPixels);
box.Width = Math.Min(s.sourceBitmap.Width, box.Width + paddingPixels * 2);
box.Height = Math.Min(s.sourceBitmap.Height, box.Height + paddingPixels * 2);
//Adjust s.originalSize so the layout occurs properly.
s.originalSize = box.Size;
s.Data[RectDataKey] = box;
}
return RequestedAction.None;
}
示例4: PostRenderImage
protected override RequestedAction PostRenderImage(ImageState s)
{
var color = s.destBitmap.GetPixel(0,0);
Console.WriteLine("PostLayoutEffects " + ++i + " color at (0,0): " + color);
return base.PostRenderImage(s);
}
示例5: PostRenderImage
protected override RequestedAction PostRenderImage(ImageState s)
{
_delays = _delays ?? GetDelays(s.sourceBitmap);
_visitor((Bitmap)s.destBitmap.Clone(), s.destGraphics, _delays[_visitIndex++]);
return base.PostRenderImage(s);
}
示例6: GetOverlayParalellogram
public PointF[] GetOverlayParalellogram(Overlay o, Size nativeSize, ImageState translateToFinalCoordinateSpace)
{
//What's the polygon w/h?
double cw = PolygonMath.Dist(o.Poly[0], o.Poly[1]);
double ch = PolygonMath.Dist(o.Poly[1], o.Poly[2]);
//Take a copy to shrink to content size
double w = cw;
double h = ch;
double aspect = (double)nativeSize.Height / (double)nativeSize.Width;
//If specified, what percentage of the space do we use?
if (o.PolyWidthInLogoPixels > 0) {
w = cw * (double)nativeSize.Width / o.PolyWidthInLogoPixels;
if (o.RespectOnlyMatchingBound) h = w * aspect;
}
if (o.PolyHeightInLogoPixels > 0) {
h = ch * (double)nativeSize.Height / o.PolyHeightInLogoPixels;
if (o.RespectOnlyMatchingBound && o.PolyWidthInLogoPixels <= 0) w = h / aspect;
}
//Shrink to keep aspect ratio
if (w / h > 1 / aspect) {
w = h / aspect;
} else {
h = w * aspect;
}
//Let's define our width/height offsets
double ox = 0; double oy = 0; ;
//Apply alignment to ox, oy
if (o.Align == ContentAlignment.BottomLeft || o.Align == ContentAlignment.MiddleLeft || o.Align == ContentAlignment.TopLeft)
ox = 0;
if (o.Align == ContentAlignment.BottomCenter || o.Align == ContentAlignment.MiddleCenter || o.Align == ContentAlignment.TopCenter)
ox = (cw - w) / 2;
if (o.Align == ContentAlignment.BottomRight || o.Align == ContentAlignment.MiddleRight || o.Align == ContentAlignment.TopRight)
ox = cw - w;
if (o.Align == ContentAlignment.TopLeft || o.Align == ContentAlignment.TopCenter || o.Align == ContentAlignment.TopRight)
oy = 0;
if (o.Align == ContentAlignment.MiddleLeft || o.Align == ContentAlignment.MiddleCenter || o.Align == ContentAlignment.MiddleRight)
oy = (ch - h) / 2;
if (o.Align == ContentAlignment.BottomLeft || o.Align == ContentAlignment.BottomCenter || o.Align == ContentAlignment.BottomRight)
oy = ch - h;
//Now, we need to rotate everything to match the rotation of the original parallelogram
double angle = Math.Atan2(o.Poly[1].Y - o.Poly[0].Y, o.Poly[1].X - o.Poly[0].X);
PointF[] t = new PointF[4];
t[0] = CreateVector(CreateVector(o.Poly[0], angle, ox), angle + Math.PI / 2, oy);
t[1] = CreateVector(t[0], angle, w);
t[2] = CreateVector(t[1], angle + Math.PI / 2, h);
t[3] = CreateVector(t[0], angle + Math.PI / 2, h);
//Translate the points if a ImageState instance was specified
if (translateToFinalCoordinateSpace != null) return this.TranslatePoints(t, translateToFinalCoordinateSpace);
return t;
}
示例7: PostCreateImageAttributes
protected override RequestedAction PostCreateImageAttributes(ImageState s)
{
if (s.copyAttibutes == null) return RequestedAction.None;
if (!s.settings.WasOneSpecified(GetSupportedQuerystringKeys().ToArray())) return RequestedAction.None;
s.copyAttibutes.SetColorMatrix(new ColorMatrix(Grayscale()));
return RequestedAction.None;
}
示例8: PostLayoutImage
protected override RequestedAction PostLayoutImage(ImageState s)
{
//Now we offset copyRect so it works properly.
if (s.Data.ContainsKey(RectDataKey)){
Rectangle box = (Rectangle)s.Data[RectDataKey];
s.copyRect = new RectangleF(s.copyRect.X + box.X, s.copyRect.Y + box.Y,s.copyRect.Width,s.copyRect.Height);
}
return RequestedAction.None;
}
示例9: buildFiBitmap
/// <summary>
/// Builds an FIBitmap from the stream and job.Settings
/// </summary>
/// <param name="s"></param>
/// <param name="job"></param>
/// <returns></returns>
protected FIBITMAP buildFiBitmap(ref FIBITMAP original, ImageJob job, bool supportsTransparency, bool mayUnloadOriginal)
{
ResizeSettings settings = job.Settings;
if (original.IsNull) return FIBITMAP.Zero;
FIBITMAP final = FIBITMAP.Zero;
//Find the image size
Size orig = new Size((int)FreeImage.GetWidth(original), (int)FreeImage.GetHeight(original));
//Calculate the new size of the image and the canvas.
ImageState state = new ImageState(settings, orig, true);
c.CurrentImageBuilder.Process(state);
RectangleF imageDest = PolygonMath.GetBoundingBox(state.layout["image"]);
if (imageDest.Width != orig.Width || imageDest.Height != orig.Height) {
//Rescale
bool temp;
final = FreeImage.Rescale(original, (int)imageDest.Width, (int)imageDest.Height, FreeImageScalingPlugin.ParseResizeAlgorithm(settings["fi.scale"], FREE_IMAGE_FILTER.FILTER_BOX, out temp));
if (mayUnloadOriginal) FreeImage.UnloadEx(ref original);
if (final.IsNull) return FIBITMAP.Zero;
} else {
final = original;
}
RGBQUAD bgcolor = default(RGBQUAD);
bgcolor.Color = settings.BackgroundColor;
if (settings.BackgroundColor == Color.Transparent && !supportsTransparency)
bgcolor.Color = Color.White;
//If we need to leave padding, do so.
BoxPadding outsideImage = new BoxPadding(imageDest.Left, imageDest.Top, state.destSize.Width - imageDest.Right, state.destSize.Height - imageDest.Bottom);
if (outsideImage.All != 0) {
var old = final;
//Extend canvas
final = FreeImage.EnlargeCanvas<RGBQUAD>(old,
(int)outsideImage.Left, (int)outsideImage.Top, (int)outsideImage.Right, (int)outsideImage.Bottom,
bgcolor.Color != Color.Transparent ? new Nullable<RGBQUAD>(bgcolor) : null,
FREE_IMAGE_COLOR_OPTIONS.FICO_RGBA);
if (old == original) {
if (mayUnloadOriginal) {
FreeImage.UnloadEx(ref original);
old = original;
}
} else {
FreeImage.UnloadEx(ref old); //'old' has the original value of 'final', which we allocated.
}
if (final.IsNull) return FIBITMAP.Zero;
}
return final;
}
示例10: RenderImage
protected override RequestedAction RenderImage(ImageState s)
{
//Skip this when we are doing simulations
if (s.destGraphics == null) return RequestedAction.None;
//If there's pre-rendering involved this optimization is utterly pointless.
if (s.preRenderBitmap != null) return RequestedAction.None;
//Find out what the speed setting is.
int speed = 0;
if (string.IsNullOrEmpty(s.settings["speed"]) || !int.TryParse(s.settings["speed"], NumberStyles.Integer, NumberFormatInfo.InvariantInfo, out speed)) speed = 0;
if (speed < 1) return RequestedAction.None;
s.destGraphics.CompositingMode = CompositingMode.SourceCopy;
s.destGraphics.CompositingQuality = CompositingQuality.HighSpeed;
if (speed == 1)
s.destGraphics.InterpolationMode = InterpolationMode.HighQualityBilinear;
else
s.destGraphics.InterpolationMode = InterpolationMode.Bilinear;
s.destGraphics.PixelOffsetMode = PixelOffsetMode.HighSpeed;
s.destGraphics.SmoothingMode = SmoothingMode.HighSpeed;
s.copyAttibutes.SetWrapMode(WrapMode.TileFlipXY);
if (speed < 3) {
s.destGraphics.DrawImage(s.sourceBitmap, PolygonMath.getParallelogram(s.layout["image"]), s.copyRect, GraphicsUnit.Pixel, s.copyAttibutes);
} else if (speed < 4) {
Rectangle midsize = PolygonMath.ToRectangle(PolygonMath.GetBoundingBox(s.layout["image"]));
using (Image thumb = s.sourceBitmap.GetThumbnailImage(midsize.Width, midsize.Height, delegate() { return false; }, IntPtr.Zero)) {
double xfactor = (double)thumb.Width / (double)s.sourceBitmap.Width;
double yfactor = (double)thumb.Height / (double)s.sourceBitmap.Height;
RectangleF copyPart = new RectangleF((float)(s.copyRect.Left * xfactor),
(float)(s.copyRect.Top * yfactor),
(float)(s.copyRect.Width * xfactor),
(float)(s.copyRect.Height * yfactor));
if (Math.Floor(copyPart.Height) == thumb.Height || Math.Ceiling(copyPart.Height) == thumb.Height) copyPart.Height = thumb.Height;
if (Math.Floor(copyPart.Width) == thumb.Width || Math.Ceiling(copyPart.Width) == thumb.Width) copyPart.Width = thumb.Width;
s.destGraphics.DrawImage(thumb, PolygonMath.getParallelogram(s.layout["image"]), copyPart, GraphicsUnit.Pixel, s.copyAttibutes);
}
} else {
RectangleF box = PolygonMath.GetBoundingBox(PolygonMath.getParallelogram(s.layout["image"]));
s.destGraphics.CompositingMode = CompositingMode.SourceCopy;
s.destGraphics.DrawImage(s.sourceBitmap, box.Left, box.Top, box.Width, box.Height);
}
return RequestedAction.Cancel;
}
示例11: LayoutImage
protected override RequestedAction LayoutImage(ImageState s)
{
//Only activated if both width and height are specified, and mode=crop.
if (s.settings.Mode != FitMode.Crop || s.settings.Width < 0 || s.settings.Height < 0) return RequestedAction.None;
//Calculate bounding box for all coordinates specified.
double[] focus = NameValueCollectionExtensions.GetList<double>(s.settings, "c.focus", null, 2, 4, 8, 12, 16, 20, 24, 28, 32, 36, 40, 44, 48, 52, 56, 60, 64, 68, 72);
if (focus == null) return RequestedAction.None;
RectangleF box = PolygonMath.GetBoundingBox(focus);
var bounds = new RectangleF(new PointF(0,0),s.originalSize);
//Clip box to original image bounds
box = PolygonMath.ClipRectangle(box, bounds);
var targetSize = new SizeF(s.settings.Width,s.settings.Height);
SizeF copySize;
//Now, we can either crop as closely as possible or as loosely as possible.
if (NameValueCollectionExtensions.Get<bool>(s.settings, "c.zoom", false) && box.Width > 0 && box.Height > 0) {
//Crop close
copySize = PolygonMath.ScaleOutside(box.Size, targetSize);
} else {
//Crop minimally
copySize = PolygonMath.ScaleInside(targetSize, bounds.Size);
//Ensure it's outside the box
if (!PolygonMath.FitsInside(box.Size,copySize)) copySize = PolygonMath.ScaleOutside(box.Size, copySize);
}
//Clip to bounds.
box = PolygonMath.ClipRectangle(PolygonMath.ExpandTo(box, copySize), bounds);
s.copyRect = box;
///What is the vertical and horizontal aspect ratio different in result pixels?
var padding = PolygonMath.ScaleInside(box.Size, targetSize);
padding = new SizeF(targetSize.Width - padding.Width, targetSize.Height - padding.Height);
//So, if we haven't met the aspect ratio yet, what mode will we pass on?
var finalmode = NameValueCollectionExtensions.Get<FitMode>(s.settings, "c.finalmode", FitMode.Pad);
//Crop off 1 or 2 pixels instead of padding without worrying too much
if (finalmode == FitMode.Pad && padding.Width + padding.Height < 3) finalmode = FitMode.Crop;
s.settings.Mode = finalmode;
return RequestedAction.None;
}
示例12: PostRenderImage
protected override RequestedAction PostRenderImage(ImageState s)
{
if (s.destBitmap == null)
return RequestedAction.None;
if (!s.settings.WasOneSpecified(GetSupportedQuerystringKeys().ToArray()))
return RequestedAction.None;;
int blurSize;
if (!int.TryParse(s.settings["ipt.blur"], out blurSize))
{
return RequestedAction.None;
}
new GaussianBlur(1.4, blurSize).ApplyInPlace(s.destBitmap);
return RequestedAction.None;
}
示例13: RenderOverlays
protected override RequestedAction RenderOverlays(ImageState s)
{
// Get 'sample' from the querystring
string sample = s.settings["sample"];
//Don't try to draw the string if it is empty, or if this is a 'simulation' render
if (string.IsNullOrEmpty(sample) || s.destGraphics == null) return RequestedAction.None;
//Let's use Arial, and make sure the text fits inside the bitmap width.
System.Drawing.Font font = new System.Drawing.Font("Arial",
(float)(s.destBitmap.Width / (sample.Length * 1.5f)), System.Drawing.GraphicsUnit.Pixel);
//Draw the text at the top left corner of the resulting image.
s.destGraphics.DrawString(sample, font, System.Drawing.Brushes.Black, 0, 0);
return RequestedAction.None;
}
示例14: PostLayoutImage
protected override RequestedAction PostLayoutImage(ImageState s)
{
base.PostLayoutImage(s);
if (!limits.HasImageSize) return RequestedAction.None;//Skip this unless we have image size limits
SizeF box = s.layout.GetBoundingBox().Size;
double wFactor = box.Width / limits.ImageSize.Width;
double hFactor = box.Height / limits.ImageSize.Height;
double scaleFactor = wFactor > hFactor ? wFactor : hFactor;
if (scaleFactor > 1) {
//The bounding box exceeds the ImageSize. Scale down until it fits.
s.layout.Scale(1 / scaleFactor, new PointF(0, 0));
}
return RequestedAction.None;
}
示例15: LayoutEffects
protected override RequestedAction LayoutEffects(ImageState s)
{
float shadowWidth = s.settings.Get<float>("shadowWidth", 0);
if (shadowWidth != 0) {
var offset = NameValueCollectionExtensions.GetList<float>(s.settings, "shadowOffset", 0, 2);
PointF shadowOffset = offset == null ? new PointF(0,0) : new PointF(offset[0], offset[1]);
//Clone last ring, then offset it - provides the inner bounds of the shadow later
s.layout.AddInvisiblePolygon("shadowInner", PolygonMath.MovePoly(s.layout.LastRing.points, shadowOffset));
//Determine the outer bound of the shadow
s.layout.AddRing("shadow", PolygonMath.InflatePoly(s.layout.LastRing.points, new float[]{
Math.Max(0, shadowWidth - shadowOffset.Y),
Math.Max(0, shadowWidth + shadowOffset.X),
Math.Max(0, shadowWidth + shadowOffset.Y),
Math.Max(0, shadowWidth - shadowOffset.X)
}));
}
return RequestedAction.None;
}