hOLOlu LCD
C# Kayan Yazı Denemesi
This commit is contained in:
935
TextDesignerCSLibrary/OutlineText.cs
Normal file
935
TextDesignerCSLibrary/OutlineText.cs
Normal file
@@ -0,0 +1,935 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using System.Drawing;
|
||||
using System.Drawing.Drawing2D;
|
||||
using System.Drawing.Imaging;
|
||||
|
||||
namespace TextDesignerCSLibrary
|
||||
{
|
||||
public class OutlineText : IOutlineText
|
||||
{
|
||||
public OutlineText()
|
||||
{
|
||||
m_pTextStrategy = null;
|
||||
m_pShadowStrategy = null;
|
||||
m_pFontBodyShadow = null;
|
||||
m_pBkgdBitmap = null;
|
||||
m_clrShadow = System.Drawing.Color.FromArgb(0,0,0);
|
||||
m_bEnableShadow = false;
|
||||
m_bDiffuseShadow = false;
|
||||
m_nShadowThickness = 2;
|
||||
disposed = false;
|
||||
}
|
||||
public OutlineText(OutlineText rhs)
|
||||
{
|
||||
if (rhs.m_pTextStrategy != null) m_pTextStrategy = rhs.m_pTextStrategy.Clone(); else m_pTextStrategy = null;
|
||||
if (rhs.m_pShadowStrategy != null) m_pShadowStrategy = rhs.m_pShadowStrategy.Clone(); else m_pShadowStrategy = null;
|
||||
if (rhs.m_pFontBodyShadow != null) m_pFontBodyShadow = rhs.m_pFontBodyShadow.Clone(); else m_pFontBodyShadow = null;
|
||||
m_pBkgdBitmap = rhs.m_pBkgdBitmap;
|
||||
m_clrShadow = rhs.m_clrShadow;
|
||||
m_bEnableShadow = rhs.m_bEnableShadow;
|
||||
m_bDiffuseShadow = rhs.m_bDiffuseShadow;
|
||||
m_nShadowThickness = rhs.m_nShadowThickness;
|
||||
disposed = false;
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
Dispose(true);
|
||||
GC.SuppressFinalize(this);
|
||||
}
|
||||
protected virtual void Dispose(bool disposing)
|
||||
{
|
||||
if (!this.disposed)
|
||||
{
|
||||
if (disposing)
|
||||
{
|
||||
if (m_pTextStrategy != null)
|
||||
m_pTextStrategy.Dispose();
|
||||
if (m_pShadowStrategy != null)
|
||||
m_pShadowStrategy.Dispose();
|
||||
if (m_pFontBodyShadow != null)
|
||||
m_pFontBodyShadow.Dispose();
|
||||
if (m_pBkgdBitmap != null)
|
||||
m_pBkgdBitmap.Dispose();
|
||||
}
|
||||
|
||||
disposed = true;
|
||||
}
|
||||
}
|
||||
|
||||
~OutlineText()
|
||||
{
|
||||
Dispose(false);
|
||||
}
|
||||
|
||||
public void TextGlow(
|
||||
System.Drawing.Color clrText,
|
||||
System.Drawing.Color clrOutline,
|
||||
int nThickness)
|
||||
{
|
||||
TextGlowStrategy pStrat = new TextGlowStrategy();
|
||||
pStrat.Init(clrText,clrOutline,nThickness);
|
||||
|
||||
m_pTextStrategy = pStrat;
|
||||
}
|
||||
|
||||
public void TextGlow(
|
||||
System.Drawing.Brush brushText,
|
||||
System.Drawing.Color clrOutline,
|
||||
int nThickness)
|
||||
{
|
||||
TextGlowStrategy pStrat = new TextGlowStrategy();
|
||||
pStrat.Init(brushText, clrOutline, nThickness);
|
||||
|
||||
m_pTextStrategy = pStrat;
|
||||
}
|
||||
|
||||
public void TextOutline(
|
||||
System.Drawing.Color clrText,
|
||||
System.Drawing.Color clrOutline,
|
||||
int nThickness)
|
||||
{
|
||||
TextOutlineStrategy pStrat = new TextOutlineStrategy();
|
||||
pStrat.Init(clrText,clrOutline,nThickness);
|
||||
|
||||
m_pTextStrategy = pStrat;
|
||||
}
|
||||
|
||||
public void TextOutline(
|
||||
System.Drawing.Brush brushText,
|
||||
System.Drawing.Color clrOutline,
|
||||
int nThickness)
|
||||
{
|
||||
TextOutlineStrategy pStrat = new TextOutlineStrategy();
|
||||
pStrat.Init(brushText, clrOutline, nThickness);
|
||||
|
||||
m_pTextStrategy = pStrat;
|
||||
}
|
||||
|
||||
public void TextDblOutline(
|
||||
System.Drawing.Color clrText,
|
||||
System.Drawing.Color clrOutline1,
|
||||
System.Drawing.Color clrOutline2,
|
||||
int nThickness1,
|
||||
int nThickness2)
|
||||
{
|
||||
TextDblOutlineStrategy pStrat = new TextDblOutlineStrategy();
|
||||
pStrat.Init(clrText,clrOutline1,clrOutline2,nThickness1,nThickness2);
|
||||
|
||||
m_pTextStrategy = pStrat;
|
||||
}
|
||||
|
||||
public void TextDblOutline(
|
||||
System.Drawing.Brush brushText,
|
||||
System.Drawing.Color clrOutline1,
|
||||
System.Drawing.Color clrOutline2,
|
||||
int nThickness1,
|
||||
int nThickness2)
|
||||
{
|
||||
TextDblOutlineStrategy pStrat = new TextDblOutlineStrategy();
|
||||
pStrat.Init(brushText, clrOutline1, clrOutline2, nThickness1, nThickness2);
|
||||
|
||||
m_pTextStrategy = pStrat;
|
||||
}
|
||||
|
||||
public void TextDblGlow(
|
||||
System.Drawing.Color clrText,
|
||||
System.Drawing.Color clrOutline1,
|
||||
System.Drawing.Color clrOutline2,
|
||||
int nThickness1,
|
||||
int nThickness2)
|
||||
{
|
||||
TextDblGlowStrategy pStrat = new TextDblGlowStrategy();
|
||||
pStrat.Init(clrText, clrOutline1, clrOutline2, nThickness1, nThickness2);
|
||||
|
||||
m_pTextStrategy = pStrat;
|
||||
}
|
||||
|
||||
public void TextDblGlow(
|
||||
System.Drawing.Brush brushText,
|
||||
System.Drawing.Color clrOutline1,
|
||||
System.Drawing.Color clrOutline2,
|
||||
int nThickness1,
|
||||
int nThickness2)
|
||||
{
|
||||
TextDblGlowStrategy pStrat = new TextDblGlowStrategy();
|
||||
pStrat.Init(brushText, clrOutline1, clrOutline2, nThickness1, nThickness2);
|
||||
|
||||
m_pTextStrategy = pStrat;
|
||||
}
|
||||
|
||||
public void TextGradOutline(
|
||||
System.Drawing.Color clrText,
|
||||
System.Drawing.Color clrOutline1,
|
||||
System.Drawing.Color clrOutline2,
|
||||
int nThickness)
|
||||
{
|
||||
TextGradOutlineStrategy pStrat = new TextGradOutlineStrategy();
|
||||
pStrat.Init(clrText, clrOutline1, clrOutline2, nThickness);
|
||||
|
||||
m_pTextStrategy = pStrat;
|
||||
}
|
||||
|
||||
public void TextGradOutline(
|
||||
System.Drawing.Brush brushText,
|
||||
System.Drawing.Color clrOutline1,
|
||||
System.Drawing.Color clrOutline2,
|
||||
int nThickness)
|
||||
{
|
||||
TextGradOutlineStrategy pStrat = new TextGradOutlineStrategy();
|
||||
pStrat.Init(brushText, clrOutline1, clrOutline2, nThickness);
|
||||
|
||||
m_pTextStrategy = pStrat;
|
||||
}
|
||||
|
||||
public void TextNoOutline(System.Drawing.Color clrText)
|
||||
{
|
||||
TextNoOutlineStrategy pStrat = new TextNoOutlineStrategy();
|
||||
pStrat.Init(clrText);
|
||||
|
||||
m_pTextStrategy = pStrat;
|
||||
}
|
||||
|
||||
public void TextNoOutline(System.Drawing.Brush brushText)
|
||||
{
|
||||
TextNoOutlineStrategy pStrat = new TextNoOutlineStrategy();
|
||||
pStrat.Init(brushText);
|
||||
|
||||
m_pTextStrategy = pStrat;
|
||||
}
|
||||
|
||||
public void TextOnlyOutline(
|
||||
System.Drawing.Color clrOutline,
|
||||
int nThickness,
|
||||
bool bRoundedEdge)
|
||||
{
|
||||
TextOnlyOutlineStrategy pStrat = new TextOnlyOutlineStrategy();
|
||||
pStrat.Init(clrOutline, nThickness, bRoundedEdge);
|
||||
|
||||
m_pTextStrategy = pStrat;
|
||||
}
|
||||
|
||||
|
||||
public void SetShadowBkgd(System.Drawing.Bitmap pBitmap)
|
||||
{
|
||||
m_pBkgdBitmap = pBitmap;
|
||||
}
|
||||
|
||||
public void SetShadowBkgd(System.Drawing.Color clrBkgd, int nWidth, int nHeight)
|
||||
{
|
||||
m_pBkgdBitmap = new System.Drawing.Bitmap(nWidth, nHeight, System.Drawing.Imaging.PixelFormat.Format32bppArgb);
|
||||
|
||||
using (System.Drawing.Graphics graphics = System.Drawing.Graphics.FromImage(m_pBkgdBitmap))
|
||||
{
|
||||
using (System.Drawing.SolidBrush brush = new System.Drawing.SolidBrush(clrBkgd))
|
||||
{
|
||||
graphics.FillRectangle(brush, 0, 0, m_pBkgdBitmap.Width, m_pBkgdBitmap.Height);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void SetNullTextEffect()
|
||||
{
|
||||
m_pTextStrategy = null;
|
||||
}
|
||||
|
||||
public void SetNullShadow()
|
||||
{
|
||||
m_pFontBodyShadow = null;
|
||||
m_pShadowStrategy = null;
|
||||
}
|
||||
|
||||
|
||||
public void EnableShadow(bool bEnable)
|
||||
{
|
||||
m_bEnableShadow = bEnable;
|
||||
}
|
||||
|
||||
public bool IsShadowEnabled()
|
||||
{
|
||||
return m_bEnableShadow;
|
||||
}
|
||||
|
||||
public void Shadow(
|
||||
System.Drawing.Color color,
|
||||
int nThickness,
|
||||
System.Drawing.Point ptOffset)
|
||||
{
|
||||
TextOutlineStrategy pStrat = new TextOutlineStrategy();
|
||||
pStrat.Init(System.Drawing.Color.FromArgb(0,0,0,0),color,nThickness);
|
||||
|
||||
m_clrShadow = color;
|
||||
|
||||
TextOutlineStrategy pFontBodyShadow = new TextOutlineStrategy();
|
||||
pFontBodyShadow.Init(System.Drawing.Color.FromArgb(255, 255, 255), System.Drawing.Color.FromArgb(0, 0, 0, 0), 0);
|
||||
m_pFontBodyShadow = pFontBodyShadow;
|
||||
|
||||
m_ptShadowOffset = ptOffset;
|
||||
m_pShadowStrategy = pStrat;
|
||||
m_bDiffuseShadow = false;
|
||||
}
|
||||
|
||||
public void DiffusedShadow(
|
||||
System.Drawing.Color color,
|
||||
int nThickness,
|
||||
System.Drawing.Point ptOffset)
|
||||
{
|
||||
DiffusedShadowStrategy pStrat = new DiffusedShadowStrategy();
|
||||
pStrat.Init(System.Drawing.Color.FromArgb(0,0,0,0),color,nThickness,true);
|
||||
|
||||
m_clrShadow = color;
|
||||
|
||||
DiffusedShadowStrategy pFontBodyShadow = new DiffusedShadowStrategy();
|
||||
pFontBodyShadow.Init(System.Drawing.Color.FromArgb(color.A, 255, 255), System.Drawing.Color.FromArgb(0, 0, 0, 0), 0, true);
|
||||
m_pFontBodyShadow = pFontBodyShadow;
|
||||
|
||||
m_ptShadowOffset = ptOffset;
|
||||
m_pShadowStrategy = pStrat;
|
||||
m_bDiffuseShadow = true;
|
||||
m_bExtrudeShadow = false;
|
||||
m_nShadowThickness = nThickness;
|
||||
}
|
||||
|
||||
public void Extrude(
|
||||
System.Drawing.Color color,
|
||||
int nThickness,
|
||||
System.Drawing.Point ptOffset)
|
||||
{
|
||||
ExtrudeStrategy pStrat = new ExtrudeStrategy();
|
||||
pStrat.Init(System.Drawing.Color.FromArgb(0, 0, 0, 0), color, nThickness, ptOffset.X, ptOffset.Y);
|
||||
|
||||
m_clrShadow = color;
|
||||
|
||||
ExtrudeStrategy pFontBodyShadow = new ExtrudeStrategy();
|
||||
pFontBodyShadow.Init(System.Drawing.Color.FromArgb(color.A, 255, 255), System.Drawing.Color.FromArgb(0, 0, 0, 0), 0, ptOffset.X, ptOffset.Y);
|
||||
m_pFontBodyShadow = pFontBodyShadow;
|
||||
|
||||
m_ptShadowOffset = ptOffset;
|
||||
m_pShadowStrategy = pStrat;
|
||||
m_bExtrudeShadow = true;
|
||||
m_bDiffuseShadow = false;
|
||||
m_nShadowThickness = nThickness;
|
||||
}
|
||||
|
||||
|
||||
public bool DrawString(
|
||||
System.Drawing.Graphics graphics,
|
||||
System.Drawing.FontFamily fontFamily,
|
||||
System.Drawing.FontStyle fontStyle,
|
||||
int nfontSize,
|
||||
string strText,
|
||||
System.Drawing.Point ptDraw,
|
||||
System.Drawing.StringFormat strFormat)
|
||||
{
|
||||
if (m_bEnableShadow && m_pShadowStrategy != null)
|
||||
{
|
||||
m_pShadowStrategy.DrawString(
|
||||
graphics,
|
||||
fontFamily,
|
||||
fontStyle,
|
||||
nfontSize,
|
||||
strText,
|
||||
new System.Drawing.Point(ptDraw.X+m_ptShadowOffset.X, ptDraw.Y+m_ptShadowOffset.Y),
|
||||
strFormat);
|
||||
}
|
||||
|
||||
if (m_bEnableShadow && m_pBkgdBitmap != null && m_pFontBodyShadow != null)
|
||||
{
|
||||
RenderFontShadow(
|
||||
graphics,
|
||||
fontFamily,
|
||||
fontStyle,
|
||||
nfontSize,
|
||||
strText,
|
||||
new System.Drawing.Point(ptDraw.X + m_ptShadowOffset.X, ptDraw.Y + m_ptShadowOffset.Y),
|
||||
strFormat);
|
||||
}
|
||||
|
||||
if (m_pTextStrategy != null)
|
||||
{
|
||||
return m_pTextStrategy.DrawString(
|
||||
graphics,
|
||||
fontFamily,
|
||||
fontStyle,
|
||||
nfontSize,
|
||||
strText,
|
||||
ptDraw,
|
||||
strFormat);
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
public bool DrawString(
|
||||
System.Drawing.Graphics graphics,
|
||||
System.Drawing.FontFamily fontFamily,
|
||||
System.Drawing.FontStyle fontStyle,
|
||||
int nfontSize,
|
||||
string strText,
|
||||
System.Drawing.Rectangle rtDraw,
|
||||
System.Drawing.StringFormat strFormat)
|
||||
{
|
||||
if(m_bEnableShadow &&m_pShadowStrategy!=null)
|
||||
{
|
||||
m_pShadowStrategy.DrawString(
|
||||
graphics,
|
||||
fontFamily,
|
||||
fontStyle,
|
||||
nfontSize,
|
||||
strText,
|
||||
new System.Drawing.Rectangle(rtDraw.X+m_ptShadowOffset.X, rtDraw.Y+m_ptShadowOffset.Y,rtDraw.Width,rtDraw.Height),
|
||||
strFormat);
|
||||
}
|
||||
|
||||
if (m_bEnableShadow && m_pBkgdBitmap != null && m_pFontBodyShadow != null)
|
||||
{
|
||||
RenderFontShadow(
|
||||
graphics,
|
||||
fontFamily,
|
||||
fontStyle,
|
||||
nfontSize,
|
||||
strText,
|
||||
new System.Drawing.Rectangle(rtDraw.X + m_ptShadowOffset.X, rtDraw.Y + m_ptShadowOffset.Y, rtDraw.Width, rtDraw.Height),
|
||||
strFormat);
|
||||
}
|
||||
|
||||
if (m_pTextStrategy != null)
|
||||
{
|
||||
return m_pTextStrategy.DrawString(
|
||||
graphics,
|
||||
fontFamily,
|
||||
fontStyle,
|
||||
nfontSize,
|
||||
strText,
|
||||
rtDraw,
|
||||
strFormat);
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public bool MeasureString(
|
||||
System.Drawing.Graphics graphics,
|
||||
System.Drawing.FontFamily fontFamily,
|
||||
System.Drawing.FontStyle fontStyle,
|
||||
int nfontSize,
|
||||
string strText,
|
||||
System.Drawing.Point ptDraw,
|
||||
System.Drawing.StringFormat strFormat,
|
||||
ref float fStartX,
|
||||
ref float fStartY,
|
||||
ref float fDestWidth,
|
||||
ref float fDestHeight)
|
||||
{
|
||||
float fDestWidth1 = 0.0f;
|
||||
float fDestHeight1 = 0.0f;
|
||||
bool b = false;
|
||||
if(m_pTextStrategy!=null)
|
||||
{
|
||||
b = m_pTextStrategy.MeasureString(
|
||||
graphics,
|
||||
fontFamily,
|
||||
fontStyle,
|
||||
nfontSize,
|
||||
strText,
|
||||
ptDraw,
|
||||
strFormat,
|
||||
ref fStartX,
|
||||
ref fStartY,
|
||||
ref fDestWidth1,
|
||||
ref fDestHeight1 );
|
||||
if(!b)
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
float fDestWidth2 = 0.0f;
|
||||
float fDestHeight2 = 0.0f;
|
||||
float fStartX2 = 0.0f;
|
||||
float fStartY2 = 0.0f;
|
||||
if(m_bEnableShadow)
|
||||
{
|
||||
b = m_pShadowStrategy.MeasureString(
|
||||
graphics,
|
||||
fontFamily,
|
||||
fontStyle,
|
||||
nfontSize,
|
||||
strText,
|
||||
ptDraw,
|
||||
strFormat,
|
||||
ref fStartX2,
|
||||
ref fStartY2,
|
||||
ref fDestWidth2,
|
||||
ref fDestHeight2 );
|
||||
|
||||
if(b)
|
||||
{
|
||||
float fDestWidth3 = 0.0f;
|
||||
float fDestHeight3 = 0.0f;
|
||||
float fStartX3 = 0.0f;
|
||||
float fStartY3 = 0.0f;
|
||||
b = GDIPath.ConvertToPixels(graphics, m_ptShadowOffset.X, m_ptShadowOffset.Y,
|
||||
ref fStartX3, ref fStartY3, ref fDestWidth3, ref fDestHeight3);
|
||||
if(b)
|
||||
{
|
||||
fDestWidth2 += fDestWidth3;
|
||||
fDestHeight2 += fDestHeight3;
|
||||
}
|
||||
}
|
||||
else
|
||||
return false;
|
||||
}
|
||||
|
||||
if(fDestWidth1>fDestWidth2 || fDestHeight1>fDestHeight2)
|
||||
{
|
||||
fDestWidth = fDestWidth1;
|
||||
fDestHeight = fDestHeight1;
|
||||
}
|
||||
else
|
||||
{
|
||||
fDestWidth = fDestWidth2;
|
||||
fDestHeight = fDestHeight2;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
public bool MeasureString(
|
||||
System.Drawing.Graphics graphics,
|
||||
System.Drawing.FontFamily fontFamily,
|
||||
System.Drawing.FontStyle fontStyle,
|
||||
int nfontSize,
|
||||
string strText,
|
||||
System.Drawing.Rectangle rtDraw,
|
||||
System.Drawing.StringFormat strFormat,
|
||||
ref float fStartX,
|
||||
ref float fStartY,
|
||||
ref float fDestWidth,
|
||||
ref float fDestHeight)
|
||||
{
|
||||
float fDestWidth1 = 0.0f;
|
||||
float fDestHeight1 = 0.0f;
|
||||
bool b = false;
|
||||
if (m_pTextStrategy != null)
|
||||
{
|
||||
b = m_pTextStrategy.MeasureString(
|
||||
graphics,
|
||||
fontFamily,
|
||||
fontStyle,
|
||||
nfontSize,
|
||||
strText,
|
||||
rtDraw,
|
||||
strFormat,
|
||||
ref fStartX,
|
||||
ref fStartY,
|
||||
ref fDestWidth1,
|
||||
ref fDestHeight1);
|
||||
|
||||
if (!b)
|
||||
return false;
|
||||
}
|
||||
|
||||
float fDestWidth2 = 0.0f;
|
||||
float fDestHeight2 = 0.0f;
|
||||
float fStartX2 = 0.0f;
|
||||
float fStartY2 = 0.0f;
|
||||
if(m_bEnableShadow)
|
||||
{
|
||||
b = m_pShadowStrategy.MeasureString(
|
||||
graphics,
|
||||
fontFamily,
|
||||
fontStyle,
|
||||
nfontSize,
|
||||
strText,
|
||||
rtDraw,
|
||||
strFormat,
|
||||
ref fStartX2,
|
||||
ref fStartY2,
|
||||
ref fDestWidth2,
|
||||
ref fDestHeight2 );
|
||||
|
||||
if(b)
|
||||
{
|
||||
float fDestWidth3 = 0.0f;
|
||||
float fDestHeight3 = 0.0f;
|
||||
float fStartX3 = 0.0f;
|
||||
float fStartY3 = 0.0f;
|
||||
b = GDIPath.ConvertToPixels(graphics,m_ptShadowOffset.X,m_ptShadowOffset.Y,
|
||||
ref fStartX3, ref fStartY3, ref fDestWidth3, ref fDestHeight3);
|
||||
if(b)
|
||||
{
|
||||
fDestWidth2 += fDestWidth3;
|
||||
fDestHeight2 += fDestHeight3;
|
||||
}
|
||||
}
|
||||
else
|
||||
return false;
|
||||
}
|
||||
|
||||
if(fDestWidth1>fDestWidth2 || fDestHeight1>fDestHeight2)
|
||||
{
|
||||
fDestWidth = fDestWidth1;
|
||||
fDestHeight = fDestHeight1;
|
||||
}
|
||||
else
|
||||
{
|
||||
fDestWidth = fDestWidth2;
|
||||
fDestHeight = fDestHeight2;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void RenderFontShadow(
|
||||
System.Drawing.Graphics graphics,
|
||||
System.Drawing.FontFamily fontFamily,
|
||||
System.Drawing.FontStyle fontStyle,
|
||||
int nfontSize,
|
||||
string strText,
|
||||
System.Drawing.Point ptDraw,
|
||||
System.Drawing.StringFormat strFormat)
|
||||
{
|
||||
Rectangle rectbmp = new Rectangle(0, 0, m_pBkgdBitmap.Width, m_pBkgdBitmap.Height);
|
||||
using (System.Drawing.Bitmap pBmpMask =
|
||||
m_pBkgdBitmap.Clone(rectbmp, PixelFormat.Format32bppArgb))
|
||||
{
|
||||
|
||||
using (System.Drawing.Bitmap pBmpFontBodyBackup =
|
||||
m_pBkgdBitmap.Clone(rectbmp, PixelFormat.Format32bppArgb))
|
||||
{
|
||||
|
||||
using (System.Drawing.Graphics graphicsMask = System.Drawing.Graphics.FromImage(pBmpMask))
|
||||
{
|
||||
using (System.Drawing.SolidBrush brushBlack = new System.Drawing.SolidBrush(System.Drawing.Color.FromArgb(0, 0, 0)))
|
||||
{
|
||||
graphicsMask.FillRectangle(brushBlack, 0, 0, m_pBkgdBitmap.Width, m_pBkgdBitmap.Height);
|
||||
|
||||
|
||||
using (System.Drawing.Bitmap pBmpDisplay =
|
||||
m_pBkgdBitmap.Clone(rectbmp, PixelFormat.Format32bppArgb))
|
||||
{
|
||||
using (System.Drawing.Graphics graphicsBkgd = System.Drawing.Graphics.FromImage(pBmpDisplay))
|
||||
{
|
||||
|
||||
graphicsMask.CompositingMode = graphics.CompositingMode;
|
||||
graphicsMask.CompositingQuality = graphics.CompositingQuality;
|
||||
graphicsMask.InterpolationMode = graphics.InterpolationMode;
|
||||
graphicsMask.SmoothingMode = graphics.SmoothingMode;
|
||||
graphicsMask.TextRenderingHint = graphics.TextRenderingHint;
|
||||
graphicsMask.PageUnit = graphics.PageUnit;
|
||||
graphicsMask.PageScale = graphics.PageScale;
|
||||
|
||||
graphicsBkgd.CompositingMode = graphics.CompositingMode;
|
||||
graphicsBkgd.CompositingQuality = graphics.CompositingQuality;
|
||||
graphicsBkgd.InterpolationMode = graphics.InterpolationMode;
|
||||
graphicsBkgd.SmoothingMode = graphics.SmoothingMode;
|
||||
graphicsBkgd.TextRenderingHint = graphics.TextRenderingHint;
|
||||
graphicsBkgd.PageUnit = graphics.PageUnit;
|
||||
graphicsBkgd.PageScale = graphics.PageScale;
|
||||
|
||||
m_pFontBodyShadow.DrawString(
|
||||
graphicsMask,
|
||||
fontFamily,
|
||||
fontStyle,
|
||||
nfontSize,
|
||||
strText,
|
||||
ptDraw,
|
||||
strFormat);
|
||||
|
||||
m_pShadowStrategy.DrawString(
|
||||
graphicsBkgd,
|
||||
fontFamily,
|
||||
fontStyle,
|
||||
nfontSize,
|
||||
strText,
|
||||
ptDraw,
|
||||
strFormat);
|
||||
|
||||
unsafe
|
||||
{
|
||||
UInt32* pixelsSrc = null;
|
||||
UInt32* pixelsDest = null;
|
||||
UInt32* pixelsMask = null;
|
||||
|
||||
BitmapData bitmapDataSrc = new BitmapData();
|
||||
BitmapData bitmapDataDest = new BitmapData();
|
||||
BitmapData bitmapDataMask = new BitmapData();
|
||||
Rectangle rect = new Rectangle(0, 0, m_pBkgdBitmap.Width, m_pBkgdBitmap.Height);
|
||||
|
||||
pBmpFontBodyBackup.LockBits(
|
||||
rect,
|
||||
ImageLockMode.WriteOnly,
|
||||
PixelFormat.Format32bppArgb,
|
||||
bitmapDataSrc);
|
||||
|
||||
pBmpDisplay.LockBits(
|
||||
rect,
|
||||
ImageLockMode.WriteOnly,
|
||||
PixelFormat.Format32bppArgb,
|
||||
bitmapDataDest);
|
||||
|
||||
pBmpMask.LockBits(
|
||||
rect,
|
||||
ImageLockMode.WriteOnly,
|
||||
PixelFormat.Format32bppArgb,
|
||||
bitmapDataMask);
|
||||
|
||||
|
||||
// Write to the temporary buffer provided by LockBits.
|
||||
pixelsSrc = (UInt32*)(bitmapDataSrc.Scan0);
|
||||
pixelsDest = (UInt32*)(bitmapDataDest.Scan0);
|
||||
pixelsMask = (UInt32*)(bitmapDataMask.Scan0);
|
||||
|
||||
if (pixelsSrc == null || pixelsDest == null || pixelsMask == null)
|
||||
return;
|
||||
|
||||
UInt32 col = 0;
|
||||
int stride = bitmapDataDest.Stride >> 2;
|
||||
if (m_bDiffuseShadow && m_bExtrudeShadow == false)
|
||||
{
|
||||
for (UInt32 row = 0; row < bitmapDataDest.Height; ++row)
|
||||
{
|
||||
for (col = 0; col < bitmapDataDest.Width; ++col)
|
||||
{
|
||||
UInt32 index = (UInt32)(row * stride + col);
|
||||
Byte nAlpha = (Byte)(pixelsMask[index] & 0xff);
|
||||
UInt32 clrShadow = (UInt32)(0xff000000 | m_clrShadow.R << 16 | m_clrShadow.G << 8 | m_clrShadow.B);
|
||||
if (nAlpha > 0)
|
||||
{
|
||||
UInt32 clrtotal = clrShadow;
|
||||
for (int i = 2; i <= m_nShadowThickness; ++i)
|
||||
pixelsSrc[index] = Alphablend(pixelsSrc[index], clrtotal, m_clrShadow.A);
|
||||
|
||||
pixelsDest[index] = pixelsSrc[index];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
for (UInt32 row = 0; row < bitmapDataDest.Height; ++row)
|
||||
{
|
||||
for (col = 0; col < bitmapDataDest.Width; ++col)
|
||||
{
|
||||
UInt32 index = (UInt32)(row * stride + col);
|
||||
Byte nAlpha = (Byte)(pixelsMask[index] & 0xff);
|
||||
UInt32 clrShadow = (UInt32)(0xff000000 | m_clrShadow.R << 16 | m_clrShadow.G << 8 | m_clrShadow.B);
|
||||
if (nAlpha > 0)
|
||||
pixelsDest[index] = Alphablend(pixelsSrc[index], clrShadow, m_clrShadow.A);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pBmpMask.UnlockBits(bitmapDataMask);
|
||||
pBmpDisplay.UnlockBits(bitmapDataDest);
|
||||
pBmpFontBodyBackup.UnlockBits(bitmapDataSrc);
|
||||
|
||||
graphics.DrawImage(pBmpDisplay, 0, 0, pBmpDisplay.Width, pBmpDisplay.Height);
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void RenderFontShadow(
|
||||
System.Drawing.Graphics graphics,
|
||||
System.Drawing.FontFamily fontFamily,
|
||||
System.Drawing.FontStyle fontStyle,
|
||||
int nfontSize,
|
||||
string pszText,
|
||||
System.Drawing.Rectangle rtDraw,
|
||||
System.Drawing.StringFormat strFormat)
|
||||
{
|
||||
Rectangle rectbmp = new Rectangle(0, 0, m_pBkgdBitmap.Width, m_pBkgdBitmap.Height);
|
||||
using (System.Drawing.Bitmap pBmpMask =
|
||||
m_pBkgdBitmap.Clone(rectbmp, PixelFormat.Format32bppArgb))
|
||||
{
|
||||
|
||||
using (System.Drawing.Bitmap pBmpFontBodyBackup =
|
||||
m_pBkgdBitmap.Clone(rectbmp, PixelFormat.Format32bppArgb))
|
||||
{
|
||||
|
||||
using (System.Drawing.Graphics graphicsMask = System.Drawing.Graphics.FromImage(pBmpMask))
|
||||
{
|
||||
using (System.Drawing.SolidBrush brushBlack = new System.Drawing.SolidBrush(System.Drawing.Color.FromArgb(0, 0, 0)))
|
||||
{
|
||||
graphicsMask.FillRectangle(brushBlack, 0, 0, m_pBkgdBitmap.Width, m_pBkgdBitmap.Height);
|
||||
|
||||
using (System.Drawing.Bitmap pBmpDisplay =
|
||||
m_pBkgdBitmap.Clone(rectbmp, PixelFormat.Format32bppArgb))
|
||||
{
|
||||
using (System.Drawing.Graphics graphicsBkgd = System.Drawing.Graphics.FromImage(pBmpDisplay))
|
||||
{
|
||||
|
||||
graphicsMask.CompositingMode = graphics.CompositingMode;
|
||||
graphicsMask.CompositingQuality = graphics.CompositingQuality;
|
||||
graphicsMask.InterpolationMode = graphics.InterpolationMode;
|
||||
graphicsMask.SmoothingMode = graphics.SmoothingMode;
|
||||
graphicsMask.TextRenderingHint = graphics.TextRenderingHint;
|
||||
graphicsMask.PageUnit = graphics.PageUnit;
|
||||
graphicsMask.PageScale = graphics.PageScale;
|
||||
|
||||
graphicsBkgd.CompositingMode = graphics.CompositingMode;
|
||||
graphicsBkgd.CompositingQuality = graphics.CompositingQuality;
|
||||
graphicsBkgd.InterpolationMode = graphics.InterpolationMode;
|
||||
graphicsBkgd.SmoothingMode = graphics.SmoothingMode;
|
||||
graphicsBkgd.TextRenderingHint = graphics.TextRenderingHint;
|
||||
graphicsBkgd.PageUnit = graphics.PageUnit;
|
||||
graphicsBkgd.PageScale = graphics.PageScale;
|
||||
|
||||
m_pFontBodyShadow.DrawString(
|
||||
graphicsMask,
|
||||
fontFamily,
|
||||
fontStyle,
|
||||
nfontSize,
|
||||
pszText,
|
||||
rtDraw,
|
||||
strFormat);
|
||||
|
||||
m_pShadowStrategy.DrawString(
|
||||
graphicsBkgd,
|
||||
fontFamily,
|
||||
fontStyle,
|
||||
nfontSize,
|
||||
pszText,
|
||||
rtDraw,
|
||||
strFormat);
|
||||
|
||||
unsafe
|
||||
{
|
||||
UInt32* pixelsSrc = null;
|
||||
UInt32* pixelsDest = null;
|
||||
UInt32* pixelsMask = null;
|
||||
|
||||
BitmapData bitmapDataSrc = new BitmapData();
|
||||
BitmapData bitmapDataDest = new BitmapData();
|
||||
BitmapData bitmapDataMask = new BitmapData();
|
||||
Rectangle rect = new Rectangle(0, 0, m_pBkgdBitmap.Width, m_pBkgdBitmap.Height);
|
||||
|
||||
pBmpFontBodyBackup.LockBits(
|
||||
rect,
|
||||
ImageLockMode.WriteOnly,
|
||||
PixelFormat.Format32bppArgb,
|
||||
bitmapDataSrc);
|
||||
|
||||
pBmpDisplay.LockBits(
|
||||
rect,
|
||||
ImageLockMode.WriteOnly,
|
||||
PixelFormat.Format32bppArgb,
|
||||
bitmapDataDest);
|
||||
|
||||
pBmpMask.LockBits(
|
||||
rect,
|
||||
ImageLockMode.WriteOnly,
|
||||
PixelFormat.Format32bppArgb,
|
||||
bitmapDataMask);
|
||||
|
||||
|
||||
// Write to the temporary buffer provided by LockBits.
|
||||
pixelsSrc = (UInt32*)(bitmapDataSrc.Scan0);
|
||||
pixelsDest = (UInt32*)(bitmapDataDest.Scan0);
|
||||
pixelsMask = (UInt32*)(bitmapDataMask.Scan0);
|
||||
|
||||
if (pixelsSrc == null || pixelsDest == null || pixelsMask == null)
|
||||
return;
|
||||
|
||||
UInt32 col = 0;
|
||||
int stride = bitmapDataDest.Stride >> 2;
|
||||
if (m_bDiffuseShadow && m_bExtrudeShadow == false)
|
||||
{
|
||||
for (UInt32 row = 0; row < bitmapDataDest.Height; ++row)
|
||||
{
|
||||
for (col = 0; col < bitmapDataDest.Width; ++col)
|
||||
{
|
||||
UInt32 index = (UInt32)(row * stride + col);
|
||||
Byte nAlpha = (Byte)(pixelsMask[index] & 0xff);
|
||||
UInt32 clrShadow = (UInt32)(0xff000000 | m_clrShadow.R << 16 | m_clrShadow.G << 8 | m_clrShadow.B);
|
||||
if (nAlpha > 0)
|
||||
{
|
||||
UInt32 clrtotal = clrShadow;
|
||||
for (int i = 2; i <= m_nShadowThickness; ++i)
|
||||
pixelsSrc[index] = Alphablend(pixelsSrc[index], clrtotal, m_clrShadow.A);
|
||||
|
||||
pixelsDest[index] = pixelsSrc[index];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
for (UInt32 row = 0; row < bitmapDataDest.Height; ++row)
|
||||
{
|
||||
for (col = 0; col < bitmapDataDest.Width; ++col)
|
||||
{
|
||||
UInt32 index = (UInt32)(row * stride + col);
|
||||
Byte nAlpha = (Byte)(pixelsMask[index] & 0xff);
|
||||
UInt32 clrShadow = (UInt32)(0xff000000 | m_clrShadow.R << 16 | m_clrShadow.G << 8 | m_clrShadow.B);
|
||||
if (nAlpha > 0)
|
||||
pixelsDest[index] = Alphablend(pixelsSrc[index], clrShadow, m_clrShadow.A);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pBmpMask.UnlockBits(bitmapDataMask);
|
||||
pBmpDisplay.UnlockBits(bitmapDataDest);
|
||||
pBmpFontBodyBackup.UnlockBits(bitmapDataSrc);
|
||||
|
||||
graphics.DrawImage(pBmpDisplay, 0, 0, pBmpDisplay.Width, pBmpDisplay.Height);
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
UInt32 Alphablend(UInt32 dest, UInt32 source, Byte nAlpha)
|
||||
{
|
||||
if( 0 == nAlpha )
|
||||
return dest;
|
||||
|
||||
if( 255 == nAlpha )
|
||||
return source;
|
||||
|
||||
Byte nInvAlpha = (Byte)(~nAlpha);
|
||||
|
||||
Byte nSrcRed = (Byte)((source & 0xff0000) >> 16);
|
||||
Byte nSrcGreen = (Byte)((source & 0xff00) >> 8);
|
||||
Byte nSrcBlue = (Byte)((source & 0xff));
|
||||
|
||||
Byte nDestRed = (Byte)((dest & 0xff0000) >> 16);
|
||||
Byte nDestGreen = (Byte)((dest & 0xff00) >> 8);
|
||||
Byte nDestBlue = (Byte)(dest & 0xff);
|
||||
|
||||
Byte nRed = (Byte)((nSrcRed * nAlpha + nDestRed * nInvAlpha) >> 8);
|
||||
Byte nGreen = (Byte)((nSrcGreen * nAlpha + nDestGreen * nInvAlpha) >> 8);
|
||||
Byte nBlue = (Byte)((nSrcBlue * nAlpha + nDestBlue * nInvAlpha) >> 8);
|
||||
|
||||
return (UInt32)(0xff000000 | nRed << 16 | nGreen << 8 | nBlue);
|
||||
}
|
||||
|
||||
|
||||
protected ITextStrategy m_pTextStrategy;
|
||||
protected ITextStrategy m_pShadowStrategy;
|
||||
protected ITextStrategy m_pFontBodyShadow;
|
||||
protected System.Drawing.Point m_ptShadowOffset;
|
||||
protected System.Drawing.Color m_clrShadow;
|
||||
protected System.Drawing.Bitmap m_pBkgdBitmap;
|
||||
protected bool m_bEnableShadow;
|
||||
protected bool m_bDiffuseShadow;
|
||||
protected int m_nShadowThickness;
|
||||
protected bool m_bExtrudeShadow;
|
||||
protected bool disposed;
|
||||
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user