More font fixes
Newer font files (old ones were faulty)
This commit is contained in:
1 parent
2bf78621ab
commit
600d5cf751
5 files changed
+34
-39
No files matched your search
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -55,27 +55,30 @@ namespace Vocaluxe.Base.Font
|
|||||||
//float factor = _GetFactor(chr, flags);
|
//float factor = _GetFactor(chr, flags);
|
||||||
System.Drawing.Font fo = CFonts.GetFont();
|
System.Drawing.Font fo = CFonts.GetFont();
|
||||||
SizeF fullSize, boundingSize;
|
SizeF fullSize, boundingSize;
|
||||||
|
Size bmpSize;
|
||||||
using (Graphics g = Graphics.FromHwnd(IntPtr.Zero))
|
using (Graphics g = Graphics.FromHwnd(IntPtr.Zero))
|
||||||
{
|
{
|
||||||
fullSize = g.MeasureString(chrString, fo);
|
fullSize = g.MeasureString(chrString, fo);
|
||||||
fullSize.Width += outlineSize;
|
fullSize.Width += outlineSize;
|
||||||
if (chr != ' ')
|
if (chr != ' ')
|
||||||
{
|
{
|
||||||
//Gets exact height and width for drawing more than 1 char. But width is to small to draw char on bitmap as e.g. italic chars will get cropped)
|
//Gets exact height and width for drawing more than 1 char. But width is to small to draw char on bitmap as e.g. italic chars will get cropped
|
||||||
boundingSize = g.MeasureString(chrString, fo, -1, new StringFormat(StringFormat.GenericTypographic));
|
boundingSize = g.MeasureString(chrString, fo, -1, new StringFormat(StringFormat.GenericTypographic));
|
||||||
boundingSize.Width += outlineSize;
|
boundingSize.Width += outlineSize;
|
||||||
if (boundingSize.Height > 0)
|
if (boundingSize.Height > 0)
|
||||||
fullSize.Height = boundingSize.Height;
|
boundingSize.Height += outlineSize;
|
||||||
|
else
|
||||||
|
boundingSize.Height = fullSize.Height;
|
||||||
|
bmpSize = new Size((int)fullSize.Width, (int)Math.Round(boundingSize.Height));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
boundingSize = fullSize;
|
boundingSize = fullSize;
|
||||||
fullSize.Width = 1;
|
bmpSize = new Size(1, 1);
|
||||||
fullSize.Height = 1;
|
|
||||||
}
|
}
|
||||||
_BoundingBox = boundingSize;
|
_BoundingBox = boundingSize;
|
||||||
}
|
}
|
||||||
using (Bitmap bmp = new Bitmap((int)(fullSize.Width), (int)(fullSize.Height), PixelFormat.Format32bppArgb))
|
using (Bitmap bmp = new Bitmap(bmpSize.Width, bmpSize.Height, PixelFormat.Format32bppArgb))
|
||||||
using (Graphics g = Graphics.FromImage(bmp))
|
using (Graphics g = Graphics.FromImage(bmp))
|
||||||
{
|
{
|
||||||
g.Clear(Color.Transparent);
|
g.Clear(Color.Transparent);
|
||||||
@@ -91,11 +94,13 @@ namespace Vocaluxe.Base.Font
|
|||||||
g.InterpolationMode = InterpolationMode.HighQualityBicubic;
|
g.InterpolationMode = InterpolationMode.HighQualityBicubic;
|
||||||
g.TextRenderingHint = TextRenderingHint.ClearTypeGridFit;
|
g.TextRenderingHint = TextRenderingHint.ClearTypeGridFit;
|
||||||
|
|
||||||
PointF point = new PointF(outlineSize / 2, 0);
|
PointF point = new PointF(outlineSize / 2, outlineSize / 2);
|
||||||
|
|
||||||
using (GraphicsPath path = new GraphicsPath())
|
using (GraphicsPath path = new GraphicsPath())
|
||||||
{
|
{
|
||||||
path.AddString(chrString, fo.FontFamily, (int)fo.Style, CFonts.Height, point, new StringFormat());
|
//Have to use size in em not pixels!
|
||||||
|
float emSize = fo.Size * fo.FontFamily.GetCellAscent(fo.Style) / fo.FontFamily.GetEmHeight(fo.Style);
|
||||||
|
path.AddString(chrString, fo.FontFamily, (int)fo.Style, emSize, point, new StringFormat());
|
||||||
|
|
||||||
using (Pen pen = new Pen(CFonts.OutlineColor.AsColor(), outlineSize))
|
using (Pen pen = new Pen(CFonts.OutlineColor.AsColor(), outlineSize))
|
||||||
{
|
{
|
||||||
@@ -148,15 +153,32 @@ namespace Vocaluxe.Base.Font
|
|||||||
|
|
||||||
private static Rectangle _GetRealBounds(Bitmap bmp)
|
private static Rectangle _GetRealBounds(Bitmap bmp)
|
||||||
{
|
{
|
||||||
int minX = 0, maxX = bmp.Width - 1;
|
int minX = 0, maxX = bmp.Width - 1, minY = 0;
|
||||||
BitmapData bmpData = bmp.LockBits(new Rectangle(0, 0, bmp.Width, bmp.Height), ImageLockMode.ReadOnly, PixelFormat.Format32bppArgb);
|
BitmapData bmpData = bmp.LockBits(new Rectangle(0, 0, bmp.Width, bmp.Height), ImageLockMode.ReadOnly, PixelFormat.Format32bppArgb);
|
||||||
int values = bmpData.Width * bmp.Height;
|
int values = bmpData.Width * bmp.Height;
|
||||||
Int32[] rgbValues = new Int32[values];
|
Int32[] rgbValues = new Int32[values];
|
||||||
Marshal.Copy(bmpData.Scan0, rgbValues, 0, values);
|
Marshal.Copy(bmpData.Scan0, rgbValues, 0, values);
|
||||||
int index;
|
int index = 0;
|
||||||
bool found = false;
|
bool found = false;
|
||||||
|
//find from top
|
||||||
|
for (int y = 0; y < bmp.Height && !found; y++)
|
||||||
|
{
|
||||||
|
for (int x = 0; x < bmp.Width; x++)
|
||||||
|
{
|
||||||
|
if (rgbValues[index] != 0)
|
||||||
|
{
|
||||||
|
minX = x;
|
||||||
|
maxX = x;
|
||||||
|
minY = y;
|
||||||
|
found = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
index++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
found = false;
|
||||||
//find left
|
//find left
|
||||||
for (int x = 0; x < maxX && !found; x++)
|
for (int x = 0; x < minX && !found; x++)
|
||||||
{
|
{
|
||||||
index = x;
|
index = x;
|
||||||
for (int y = 0; y < bmp.Height; y++)
|
for (int y = 0; y < bmp.Height; y++)
|
||||||
@@ -172,7 +194,7 @@ namespace Vocaluxe.Base.Font
|
|||||||
}
|
}
|
||||||
found = false;
|
found = false;
|
||||||
//find right
|
//find right
|
||||||
for (int x = maxX; x > minX && !found; x--)
|
for (int x = bmp.Width - 1; x > maxX && !found; x--)
|
||||||
{
|
{
|
||||||
index = x;
|
index = x;
|
||||||
for (int y = 0; y < bmp.Height; y++)
|
for (int y = 0; y < bmp.Height; y++)
|
||||||
@@ -186,34 +208,7 @@ namespace Vocaluxe.Base.Font
|
|||||||
index += bmp.Width;
|
index += bmp.Width;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return new Rectangle(minX, 0, maxX - minX + 1, bmp.Height);
|
return new Rectangle(minX, minY, maxX - minX + 1, bmp.Height - minY);
|
||||||
}
|
|
||||||
|
|
||||||
private float _GetStyleFactor(char chr, TextFormatFlags flags)
|
|
||||||
{
|
|
||||||
if (CFonts.Style == EStyle.Normal)
|
|
||||||
return 1f;
|
|
||||||
|
|
||||||
EStyle style = CFonts.Style;
|
|
||||||
|
|
||||||
CFonts.Style = EStyle.Normal;
|
|
||||||
float hStyle, hNormal;
|
|
||||||
using (Graphics g = Graphics.FromHwnd(IntPtr.Zero))
|
|
||||||
{
|
|
||||||
System.Drawing.Font fo = CFonts.GetFont();
|
|
||||||
Size sizeB = TextRenderer.MeasureText(g, chr.ToString(), fo, new Size(int.MaxValue, int.MaxValue), flags);
|
|
||||||
//SizeF size = g.MeasureString(chr.ToString(), fo);
|
|
||||||
hNormal = sizeB.Height;
|
|
||||||
}
|
|
||||||
CFonts.Style = style;
|
|
||||||
using (Graphics g = Graphics.FromHwnd(IntPtr.Zero))
|
|
||||||
{
|
|
||||||
System.Drawing.Font fo = CFonts.GetFont();
|
|
||||||
Size sizeB = TextRenderer.MeasureText(g, chr.ToString(), fo, new Size(int.MaxValue, int.MaxValue), flags);
|
|
||||||
//size = g.MeasureString(chr.ToString(), fo);
|
|
||||||
hStyle = sizeB.Height;
|
|
||||||
}
|
|
||||||
return hNormal / hStyle;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Reference in new issue
Block a user