MemBitmap CreateHalfSize(MemBitmap orgBmp) { //TODO: ... // //1. create a new one MemBitmap smallBmp = new MemBitmap(orgBmp.Width / 2, orgBmp.Height / 2); using (AggPainterPool.Borrow(smallBmp, out var painter)) { painter.DrawImage(orgBmp, AffinePlan.Scale(0.5, 0.5)); } return(smallBmp); }
MemBitmap ParseAndRenderSvg(System.Text.StringBuilder svgContent) { //---------- //copy from HtmlRenderer's SvgViewer demo //---------- var docBuilder = new VgDocBuilder(); var parser = new SvgParser(docBuilder); TextSnapshot textSnapshot = new TextSnapshot(svgContent.ToString()); parser.ParseDocument(textSnapshot); VgVisualDocBuilder builder = new VgVisualDocBuilder(); VgVisualElement vgVisElem = builder.CreateVgVisualDoc(docBuilder.ResultDocument, _vgDocHost).VgRootElem; RectD bounds = vgVisElem.GetRectBounds(); float actualXOffset = (float)-bounds.Left; float actualYOffset = (float)-bounds.Bottom; int bmpW = (int)Math.Round(bounds.Width); int bmpH = (int)Math.Round(bounds.Height); if (bmpW == 0 || bmpH == 0) { return(null); } MemBitmap memBitmap = new MemBitmap(bmpW, bmpH); using (AggPainterPool.Borrow(memBitmap, out AggPainter p)) using (VgPaintArgsPool.Borrow(p, out VgPaintArgs paintArgs)) { float orgX = p.OriginX; float orgY = p.OriginY; p.SetOrigin(actualXOffset, actualYOffset); p.Clear(PixelFarm.Drawing.Color.White); p.FillColor = PixelFarm.Drawing.Color.Black; double prevStrokeW = p.StrokeWidth; vgVisElem.Paint(paintArgs); p.StrokeWidth = prevStrokeW; //restore p.SetOrigin(orgX, orgY); //restore } return(memBitmap); }
public void Paste() { //paste img from clipboard if (System.Windows.Forms.Clipboard.ContainsImage()) { //convert clipboard img to System.Drawing.Bitmap bmp = System.Windows.Forms.Clipboard.GetImage() as System.Drawing.Bitmap; MemBitmap memBmp = new MemBitmap(bmp.Width, bmp.Height); PixelFarm.CpuBlit.Imaging.BitmapHelper.CopyFromGdiPlusBitmapSameSizeTo32BitsBuffer(bmp, memBmp); //... using (AggPainterPool.Borrow(_lionPng, out var painter)) { painter.DrawImage(memBmp); } } }
public void Cut() { //1.copy using (MemBitmap memBitmap = _lionPng.CopyImgBuffer(20, 20, 100, 100)) { using (var platformBmp = CreatePlatformBitmap(memBitmap)) { System.Windows.Forms.Clipboard.SetImage(platformBmp); } } //2. fill cut area using (AggPainterPool.Borrow(_lionPng, out var painter)) { var prevColor = painter.FillColor; painter.FillColor = Color.White; painter.FillRect(20.5, 20.5, 100, 100); painter.FillColor = prevColor; } }
void RunSampleA(PixelFarm.Drawing.Painter p) { //1. create simple vertical line to test agg's lcd rendernig technique //create gray-scale actual image using (MemBitmap glyphBmp = new MemBitmap(100, 100)) { int x = 10, y = 10; using (AggPainterPool.Borrow(glyphBmp, out var painter)) { painter.StrokeColor = PixelFarm.Drawing.Color.Black; painter.StrokeWidth = 2.0f * 3; painter.DrawLine(x * 3, 0, y * 3, 20); //scale horizontal 3 times, s } //painter.Line(x * 3, 0, y * 3, 20); //scale horizontal 3 times, //painter.Line(2, 0, 2, 15); //painter.Line(2, 0, 20, 20); //painter.Line(2, 0, 30, 15); //painter.Line(2, 0, 30, 5); //clear surface bg p.Clear(PixelFarm.Drawing.Color.White); //draw img into that bg //--------------- //convert glyphImg from RGBA to grey Scale buffer //--------------- //lcd process ... byte[] glyphGreyScale = CreateGreyScaleBuffer(glyphBmp); //--------------- //swap gray scale int newGreyImgStride; byte[] expanedGreyScaleBuffer = CreateNewExpandedLcdGrayScale(glyphGreyScale, glyphBmp.Width, glyphBmp.Height, out newGreyImgStride); //blend lcd var aggPainer = (PixelFarm.CpuBlit.AggPainter)p; Blend(aggPainer.RenderSurface.DestBitmap, expanedGreyScaleBuffer, newGreyImgStride, glyphBmp.Height); //--------------- p.DrawImage(glyphBmp, 0, 50); } }