public void RenderSolid(IImageFloat destImage, IRasterizer rasterizer, IScanlineCache scanLine, RGBA_Floats color) { if (rasterizer.rewind_scanlines()) { scanLine.reset(rasterizer.min_x(), rasterizer.max_x()); while (rasterizer.sweep_scanline(scanLine)) { RenderSolidSingleScanLine(destImage, scanLine, color); } } }
private void RenderSolidSingleScanLine(IImageFloat destImage, IScanlineCache scanLine, RGBA_Floats color) { int y = scanLine.y(); int num_spans = scanLine.num_spans(); ScanlineSpan scanlineSpan = scanLine.begin(); byte[] ManagedCoversArray = scanLine.GetCovers(); for (; ; ) { int x = scanlineSpan.x; if (scanlineSpan.len > 0) { destImage.blend_solid_hspan(x, y, scanlineSpan.len, color, ManagedCoversArray, scanlineSpan.cover_index); } else { int x2 = (x - (int)scanlineSpan.len - 1); destImage.blend_hline(x, y, x2, color, ManagedCoversArray[scanlineSpan.cover_index]); } if (--num_spans == 0) break; scanlineSpan = scanLine.GetNextScanlineSpan(); } }
public bool Attach(IImageFloat sourceImage, int x1, int y1, int x2, int y2) { m_FloatBuffer = null; DettachBuffer(); if (x1 > x2 || y1 > y2) { throw new Exception("You need to have your x1 and y1 be the lower left corner of your sub image."); } RectangleInt boundsRect = new RectangleInt(x1, y1, x2, y2); if (boundsRect.clip(new RectangleInt(0, 0, (int)sourceImage.Width - 1, (int)sourceImage.Height - 1))) { SetDimmensionAndFormat(boundsRect.Width, boundsRect.Height, sourceImage.StrideInFloats(), sourceImage.BitDepth, sourceImage.GetFloatsBetweenPixelsInclusive()); int bufferOffset = sourceImage.GetBufferOffsetXY(boundsRect.Left, boundsRect.Bottom); float[] buffer = sourceImage.GetBuffer(); SetBuffer(buffer, bufferOffset); return true; } return false; }
public void Attach(IImageFloat sourceImage, IRecieveBlenderFloat blender, int distanceBetweenPixelsInclusive, int bufferOffset, int bitsPerPixel) { SetDimmensionAndFormat(sourceImage.Width, sourceImage.Height, sourceImage.StrideInFloats(), bitsPerPixel, distanceBetweenPixelsInclusive); int offset = sourceImage.GetBufferOffsetXY(0, 0); float[] buffer = sourceImage.GetBuffer(); SetBuffer(buffer, offset + bufferOffset); SetRecieveBlender(blender); }
public ImageBuffer(IImageFloat image, IBlenderFloat blender, GammaLookUpTable gammaTable) { unsafe { AttachBuffer(image.GetBuffer(), image.Width, image.Height, image.StrideInBytes(), image.BitDepth, image.GetDistanceBetweenPixelsInclusive()); } SetRecieveBlender(blender); }
public abstract void Render(IImageFloat imageSource, double x, double y, double angleRadians, double scaleX, double ScaleY);
/// <summary> /// /// </summary> /// <param name="imageSource"> /// A <see cref="IImageFloat"/> /// </param> /// <param name="x"> /// A <see cref="System.Double"/> /// </param> /// <param name="y"> /// A <see cref="System.Double"/> /// </param> /// <param name="angleDegrees"> /// A <see cref="System.Double"/> /// </param> /// <param name="scaleX"> /// A <see cref="System.Double"/> /// </param> /// <param name="ScaleY"> /// A <see cref="System.Double"/> /// </param> /// <param name="color"> /// A <see cref="RGBA_Floats"/> /// </param> /// <param name="renderingMode"> /// A <see cref="BlendMode"/> /// </param> public abstract void Render(IImageFloat imageSource, double x, double y, double angleDegrees, double scaleX, double ScaleY, RgbaFloats color, BlendMode renderingMode);
public void Initialize(IImageFloat destImage, ScanlineRasterizer rasterizer) { destImageByte = null; destImageFloat = destImage; this.rasterizer = rasterizer; }
public ImageClippingProxyFloat(IImageFloat ren) : base(ren) { m_ClippingRect = new RectangleInt(0, 0, (int)ren.Width - 1, (int)ren.Height - 1); }
public void GenerateAndRender(IRasterizer rasterizer, IScanlineCache scanlineCache, IImageFloat destImage, span_allocator spanAllocator, ISpanGeneratorFloat spanGenerator) { if (rasterizer.rewind_scanlines()) { scanlineCache.reset(rasterizer.min_x(), rasterizer.max_x()); spanGenerator.prepare(); while (rasterizer.sweep_scanline(scanlineCache)) { GenerateAndRenderSingleScanline(scanlineCache, destImage, spanAllocator, spanGenerator); } } }
private void GenerateAndRenderSingleScanline(IScanlineCache scanLineCache, IImageFloat destImageFloat, span_allocator alloc, ISpanGeneratorFloat span_gen) { int y = scanLineCache.y(); int num_spans = scanLineCache.num_spans(); ScanlineSpan scanlineSpan = scanLineCache.begin(); byte[] ManagedCoversArray = scanLineCache.GetCovers(); for (; ; ) { int x = scanlineSpan.x; int len = scanlineSpan.len; if (len < 0) len = -len; if (tempSpanColorsFloats.Capacity() < len) { tempSpanColorsFloats.Capacity(len); } span_gen.generate(tempSpanColorsFloats.Array, 0, x, y, len); bool useFirstCoverForAll = scanlineSpan.len < 0; destImageFloat.blend_color_hspan(x, y, len, tempSpanColorsFloats.Array, 0, ManagedCoversArray, scanlineSpan.cover_index, useFirstCoverForAll); if (--num_spans == 0) break; scanlineSpan = scanLineCache.GetNextScanlineSpan(); } }
public virtual void CopyFrom(IImageFloat sourceImage, RectangleInt sourceImageRect, int destXOffset, int destYOffset) { linkedImage.CopyFrom(sourceImage, sourceImageRect, destXOffset, destYOffset); }
public virtual void CopyFrom(IImageFloat sourceRaster) { linkedImage.CopyFrom(sourceRaster); }
public virtual void LinkToImage(IImageFloat linkedImage) { this.linkedImage = linkedImage; }
public ImageProxyFloat(IImageFloat linkedImage) { this.linkedImage = linkedImage; }
protected void CopyFromNoClipping(IImageFloat sourceImage, RectangleInt clippedSourceImageRect, int destXOffset, int destYOffset) { if (GetFloatsBetweenPixelsInclusive() != BitDepth / 32 || sourceImage.GetFloatsBetweenPixelsInclusive() != sourceImage.BitDepth / 32) { throw new Exception("WIP we only support packed pixel formats at this time."); } if (BitDepth == sourceImage.BitDepth) { int lengthInFloats = clippedSourceImageRect.Width * GetFloatsBetweenPixelsInclusive(); int sourceOffset = sourceImage.GetBufferOffsetXY(clippedSourceImageRect.Left, clippedSourceImageRect.Bottom); float[] sourceBuffer = sourceImage.GetBuffer(); int destOffset; float[] destBuffer = GetPixelPointerXY(clippedSourceImageRect.Left + destXOffset, clippedSourceImageRect.Bottom + destYOffset, out destOffset); for (int i = 0; i < clippedSourceImageRect.Height; i++) { agg_basics.memmove(destBuffer, destOffset, sourceBuffer, sourceOffset, lengthInFloats); sourceOffset += sourceImage.StrideInFloats(); destOffset += StrideInFloats(); } } else { bool haveConversion = true; switch (sourceImage.BitDepth) { case 24: switch (BitDepth) { case 32: { int numPixelsToCopy = clippedSourceImageRect.Width; for (int i = clippedSourceImageRect.Bottom; i < clippedSourceImageRect.Top; i++) { int sourceOffset = sourceImage.GetBufferOffsetXY(clippedSourceImageRect.Left, clippedSourceImageRect.Bottom + i); float[] sourceBuffer = sourceImage.GetBuffer(); int destOffset; float[] destBuffer = GetPixelPointerXY( clippedSourceImageRect.Left + destXOffset, clippedSourceImageRect.Bottom + i + destYOffset, out destOffset); for (int x = 0; x < numPixelsToCopy; x++) { destBuffer[destOffset++] = sourceBuffer[sourceOffset++]; destBuffer[destOffset++] = sourceBuffer[sourceOffset++]; destBuffer[destOffset++] = sourceBuffer[sourceOffset++]; destBuffer[destOffset++] = 255; } } } break; default: haveConversion = false; break; } break; default: haveConversion = false; break; } if (!haveConversion) { throw new NotImplementedException("You need to write the " + sourceImage.BitDepth.ToString() + " to " + BitDepth.ToString() + " conversion"); } } }
public ImageBufferFloat(IImageFloat sourceImage, IRecieveBlenderFloat blender) { SetDimmensionAndFormat(sourceImage.Width, sourceImage.Height, sourceImage.StrideInFloats(), sourceImage.BitDepth, sourceImage.GetFloatsBetweenPixelsInclusive()); int offset = sourceImage.GetBufferOffsetXY(0, 0); float[] buffer = sourceImage.GetBuffer(); float[] newBuffer = new float[buffer.Length]; agg_basics.memcpy(newBuffer, offset, buffer, offset, buffer.Length - offset); SetBuffer(newBuffer, offset); SetRecieveBlender(blender); }
public override void OnDraw(Graphics2D graphics2D) { if (graphics2D.DestImage != null) { ImageBuffer widgetsSubImage = ImageBuffer.NewSubImageReference(graphics2D.DestImage, graphics2D.GetClippingRect()); IImageByte backBuffer = widgetsSubImage; int distBetween = backBuffer.GetBytesBetweenPixelsInclusive(); ImageBuffer redImageBuffer = new ImageBuffer(); redImageBuffer.Attach(backBuffer, new blender_gray(distBetween), distBetween, 2, 8); ImageBuffer greenImageBuffer = new ImageBuffer(); greenImageBuffer.Attach(backBuffer, new blender_gray(distBetween), distBetween, 1, 8); ImageBuffer blueImageBuffer = new ImageBuffer(); blueImageBuffer.Attach(backBuffer, new blender_gray(distBetween), distBetween, 0, 8); ImageClippingProxy clippingProxy = new ImageClippingProxy(backBuffer); ImageClippingProxy clippingProxyRed = new ImageClippingProxy(redImageBuffer); ImageClippingProxy clippingProxyGreen = new ImageClippingProxy(greenImageBuffer); ImageClippingProxy clippingProxyBlue = new ImageClippingProxy(blueImageBuffer); ScanlineRasterizer ras = new ScanlineRasterizer(); ScanlineCachePacked8 sl = new ScanlineCachePacked8(); RGBA_Bytes clearColor = useBlackBackgroundCheckbox.Checked ? new RGBA_Bytes(0, 0, 0) : new RGBA_Bytes(255, 255, 255); clippingProxy.clear(clearColor); alphaSlider.View.BackgroundColor = clearColor; RGBA_Bytes FillColor = useBlackBackgroundCheckbox.Checked ? new RGBA_Bytes(255, 255, 255, (int)(alphaSlider.Value)) : new RGBA_Bytes(0, 0, 0, (int)(alphaSlider.Value)); VertexSource.Ellipse er = new MatterHackers.Agg.VertexSource.Ellipse(Width / 2 - 0.87 * 50, Height / 2 - 0.5 * 50, 100, 100, 100); ras.add_path(er); ScanlineRenderer scanlineRenderer = new ScanlineRenderer(); scanlineRenderer.render_scanlines_aa_solid(clippingProxyRed, ras, sl, FillColor); VertexSource.Ellipse eg = new MatterHackers.Agg.VertexSource.Ellipse(Width / 2 + 0.87 * 50, Height / 2 - 0.5 * 50, 100, 100, 100); ras.add_path(eg); scanlineRenderer.render_scanlines_aa_solid(clippingProxyGreen, ras, sl, FillColor); VertexSource.Ellipse eb = new MatterHackers.Agg.VertexSource.Ellipse(Width / 2, Height / 2 + 50, 100, 100, 100); ras.add_path(eb); scanlineRenderer.render_scanlines_aa_solid(clippingProxyBlue, ras, sl, FillColor); } else if (graphics2D.DestImageFloat != null) { #if false IImageFloat backBuffer = graphics2D.DestImageFloat; int distBetween = backBuffer.GetFloatsBetweenPixelsInclusive(); ImageBufferFloat redImageBuffer = new ImageBufferFloat(); redImageBuffer.Attach(backBuffer, new blender_gray(distBetween), distBetween, 2, 8); ImageBufferFloat greenImageBuffer = new ImageBufferFloat(); greenImageBuffer.Attach(backBuffer, new blender_gray(distBetween), distBetween, 1, 8); ImageBufferFloat blueImageBuffer = new ImageBufferFloat(); blueImageBuffer.Attach(backBuffer, new blender_gray(distBetween), distBetween, 0, 8); ImageClippingProxy clippingProxy = new ImageClippingProxy(backBuffer); ImageClippingProxy clippingProxyRed = new ImageClippingProxy(redImageBuffer); ImageClippingProxy clippingProxyGreen = new ImageClippingProxy(greenImageBuffer); ImageClippingProxy clippingProxyBlue = new ImageClippingProxy(blueImageBuffer); ScanlineRasterizer ras = new ScanlineRasterizer(); ScanlineCachePacked8 sl = new ScanlineCachePacked8(); RGBA_Bytes clearColor = useBlackBackgroundCheckbox.Checked ? new RGBA_Bytes(0, 0, 0) : new RGBA_Bytes(255, 255, 255); clippingProxy.clear(clearColor); alphaSlider.View.BackGroundColor = clearColor; RGBA_Bytes FillColor = useBlackBackgroundCheckbox.Checked ? new RGBA_Bytes(255, 255, 255, (int)(alphaSlider.Value)) : new RGBA_Bytes(0, 0, 0, (int)(alphaSlider.Value)); VertexSource.Ellipse er = new AGG.VertexSource.Ellipse(Width / 2 - 0.87 * 50, Height / 2 - 0.5 * 50, 100, 100, 100); ras.add_path(er); agg_renderer_scanline.Default.render_scanlines_aa_solid(clippingProxyRed, ras, sl, FillColor); VertexSource.Ellipse eg = new AGG.VertexSource.Ellipse(Width / 2 + 0.87 * 50, Height / 2 - 0.5 * 50, 100, 100, 100); ras.add_path(eg); agg_renderer_scanline.Default.render_scanlines_aa_solid(clippingProxyGreen, ras, sl, FillColor); VertexSource.Ellipse eb = new AGG.VertexSource.Ellipse(Width / 2, Height / 2 + 50, 100, 100, 100); ras.add_path(eb); agg_renderer_scanline.Default.render_scanlines_aa_solid(clippingProxyBlue, ras, sl, FillColor); #endif } base.OnDraw(graphics2D); }
public override void Render(IImageFloat source, double x, double y, double angleDegrees, double inScaleX, double inScaleY) { throw new NotImplementedException(); }
private void attach(IImageFloat pixf) { m_SourceImage = pixf; m_Buffer = m_SourceImage.GetBuffer(); m_Width = m_SourceImage.Width; m_DistanceBetweenPixelsInclusive = m_SourceImage.GetFloatsBetweenPixelsInclusive(); }
public override void LinkToImage(IImageFloat ren) { base.LinkToImage(ren); m_ClippingRect = new RectangleInt(0, 0, (int)ren.Width - 1, (int)ren.Height - 1); }
public void copy_from(IImageFloat src) { CopyFrom(src, new RectangleInt(0, 0, (int)src.Width, (int)src.Height), 0, 0); }
public ImageBufferFloat(IImageFloat sourceImageToCopy, IRecieveBlenderFloat blender, int distanceBetweenPixelsInclusive, int bufferOffset, int bitsPerPixel) { SetDimmensionAndFormat(sourceImageToCopy.Width, sourceImageToCopy.Height, sourceImageToCopy.StrideInFloats(), bitsPerPixel, distanceBetweenPixelsInclusive); int offset = sourceImageToCopy.GetBufferOffsetXY(0, 0); float[] buffer = sourceImageToCopy.GetBuffer(); float[] newBuffer = new float[buffer.Length]; throw new NotImplementedException(); //agg_basics.memcpy(newBuffer, offset, buffer, offset, buffer.Length - offset); //SetBuffer(newBuffer, offset + bufferOffset); //SetRecieveBlender(blender); }
public override void CopyFrom(IImageFloat sourceImage, RectangleInt sourceImageRect, int destXOffset, int destYOffset) { RectangleInt destRect = sourceImageRect; destRect.Offset(destXOffset, destYOffset); RectangleInt clippedSourceRect = new RectangleInt(); if (clippedSourceRect.IntersectRectangles(destRect, m_ClippingRect)) { // move it back relative to the source clippedSourceRect.Offset(-destXOffset, -destYOffset); base.CopyFrom(sourceImage, clippedSourceRect, destXOffset, destYOffset); } }
public void Attach(IImageFloat sourceImage, IRecieveBlenderFloat blender) { Attach(sourceImage, blender, sourceImage.GetFloatsBetweenPixelsInclusive(), 0, sourceImage.BitDepth); }
public ImageBufferAccessorCommonFloat(IImageFloat pixf) { attach(pixf); }
public void CopyFrom(IImageFloat sourceImage) { CopyFrom(sourceImage, sourceImage.GetBounds(), 0, 0); }
public void CopyFrom(IImageFloat sourceImage, RectangleInt sourceImageRect, int destXOffset, int destYOffset) { RectangleInt sourceImageBounds = sourceImage.GetBounds(); RectangleInt clippedSourceImageRect = new RectangleInt(); if (clippedSourceImageRect.IntersectRectangles(sourceImageRect, sourceImageBounds)) { RectangleInt destImageRect = clippedSourceImageRect; destImageRect.Offset(destXOffset, destYOffset); RectangleInt destImageBounds = GetBounds(); RectangleInt clippedDestImageRect = new RectangleInt(); if (clippedDestImageRect.IntersectRectangles(destImageRect, destImageBounds)) { // we need to make sure the source is also clipped to the dest. So, we'll copy this back to source and offset it. clippedSourceImageRect = clippedDestImageRect; clippedSourceImageRect.Offset(-destXOffset, -destYOffset); CopyFromNoClipping(sourceImage, clippedSourceImageRect, destXOffset, destYOffset); } } }
public ImageBufferAccessorClipFloat(IImageFloat sourceImage, RGBA_Floats bk) : base(sourceImage) { m_OutsideBufferColor = new float[4]; m_OutsideBufferColor[0] = bk.red; m_OutsideBufferColor[1] = bk.green; m_OutsideBufferColor[2] = bk.blue; m_OutsideBufferColor[3] = bk.alpha; }
/// <summary> /// /// </summary> /// <param name="destImage"> /// A <see cref="IImage"/> /// </param> /// <param name="rasterizer"> /// A <see cref="ScanlineRasterizer"/> /// </param> public void Initialize(IImage destImage, ScanlineRasterizer rasterizer) { m_DestImage = destImage; m_DestImageFloat = null; this.rasterizer = rasterizer; }