public static int EstimateFontSize(BitmapEx bitmap, FontFamily fontFamily, string sample, int?alterWidth = null, int?alterHeight = null) { var requestedWidth = alterWidth ?? bitmap.Width; var requestedHeight = alterHeight ?? bitmap.Height; return(_cache.GetOrAdd(new Tuple <int, int, FontFamily, string>(requestedWidth, requestedHeight, fontFamily, sample), tuple => { using (var graphics = bitmap.CreateGraphics()) { var height = tuple.Item2; SizeF resultSize; do { using (var font = new Font(tuple.Item3, height, GraphicsUnit.Pixel)) { resultSize = graphics.MeasureString(tuple.Item4, font); } height -= 1; } while (resultSize.Height > tuple.Item2 || resultSize.Width > tuple.Item1); return height; } })); }
public BitmapEx CreateBitmap() { BitmapEx bitmap = new BitmapEx(_width, _height, _pixelFormat); Rectangle grayRect = new Rectangle(0, 0, bitmap.Width, bitmap.Height); BitmapData grayData = bitmap.LockBits(grayRect, ImageLockMode.ReadWrite, bitmap.PixelFormat); IntPtr grayPtr = grayData.Scan0; int grayBytes = grayData.Stride * bitmap.Height; System.Runtime.InteropServices.Marshal.Copy(_bitmapInternal, 0, grayPtr, grayBytes); bitmap.UnlockBits(grayData); return(bitmap); }
public BitmapRepresentation(BitmapEx bitmap) : this(bitmap?.GetInternal()) { }