示例#1
0
        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;
                }
            }));
        }
示例#2
0
        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);
        }
示例#3
0
 public BitmapRepresentation(BitmapEx bitmap) : this(bitmap?.GetInternal())
 {
 }