public static GlyphImage CreateMsdfImage(Msdfgen.Shape shape) { double left, bottom, right, top; shape.findBounds(out left, out bottom, out right, out top); int w = (int)Math.Ceiling((right - left)); int h = (int)Math.Ceiling((top - bottom)); if (w < 5) { w = 5; } if (h < 5) { h = 5; } int borderW = (int)((float)w / 5f); var translate = new Msdfgen.Vector2(left < 0 ? -left + borderW : borderW, bottom < 0 ? -bottom + borderW : borderW); w += borderW * 2; //borders,left- right h += borderW * 2; //borders, top- bottom Msdfgen.FloatRGBBmp frgbBmp = new Msdfgen.FloatRGBBmp(w, h); Msdfgen.EdgeColoring.edgeColoringSimple(shape, 3); Msdfgen.MsdfGenerator.generateMSDF(frgbBmp, shape, 4, new Msdfgen.Vector2(1, 1), //scale translate, //translate to positive quadrant -1); //----------------------------------- int[] buffer = Msdfgen.MsdfGenerator.ConvertToIntBmp(frgbBmp); GlyphImage img = new GlyphImage(w, h); img.TextureOffsetX = translate.x; img.TextureOffsetY = translate.y; img.SetImageBuffer(buffer, false); return(img); }
public static GlyphImage CreateMsdfImage(Msdfgen.Shape shape, MsdfGenParams genParams) { double left, bottom, right, top; shape.findBounds(out left, out bottom, out right, out top); int w = (int)Math.Ceiling((right - left)); int h = (int)Math.Ceiling((top - bottom)); if (w < genParams.minImgWidth) { w = genParams.minImgWidth; } if (h < genParams.minImgHeight) { h = genParams.minImgHeight; } //temp, for debug with glyph 'I', tahoma font //double edgeThreshold = 1.00000001;//default, if edgeThreshold < 0 then set edgeThreshold=1 //Msdfgen.Vector2 scale = new Msdfgen.Vector2(0.98714652956298199, 0.98714652956298199); //double pxRange = 4; //translate = new Msdfgen.Vector2(12.552083333333332, 4.0520833333333330); //double range = pxRange / Math.Min(scale.x, scale.y); int borderW = (int)((float)w / 5f); var translate = new Msdfgen.Vector2(left < 0 ? -left + borderW : borderW, bottom < 0 ? -bottom + borderW : borderW); w += borderW * 2; //borders,left- right h += borderW * 2; //borders, top- bottom double edgeThreshold = genParams.edgeThreshold; if (edgeThreshold < 0) { edgeThreshold = 1.00000001; //use default if edgeThreshold <0 } var scale = new Msdfgen.Vector2(genParams.scaleX, genParams.scaleY); //scale double range = genParams.pxRange / Math.Min(scale.x, scale.y); //--------- Msdfgen.FloatRGBBmp frgbBmp = new Msdfgen.FloatRGBBmp(w, h); Msdfgen.EdgeColoring.edgeColoringSimple(shape, genParams.angleThreshold); Msdfgen.MsdfGenerator.generateMSDF(frgbBmp, shape, range, scale, translate,//translate to positive quadrant edgeThreshold); //----------------------------------- int[] buffer = Msdfgen.MsdfGenerator.ConvertToIntBmp(frgbBmp); GlyphImage img = new GlyphImage(w, h); img.TextureOffsetX = (short)translate.x; img.TextureOffsetY = (short)translate.y; img.SetImageBuffer(buffer, false); return(img); }