本文整理汇总了C#中ITexture.Blt方法的典型用法代码示例。如果您正苦于以下问题:C# ITexture.Blt方法的具体用法?C# ITexture.Blt怎么用?C# ITexture.Blt使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类ITexture
的用法示例。
在下文中一共展示了ITexture.Blt方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: BltRotate
/// <summary>
/// bltの回転機能つき。
/// </summary>
/// <param name="src"></param>
/// <param name="x"></param>
/// <param name="y"></param>
/// <param name="srcRect"></param>
/// <param name="rad"></param>
/// <param name="rate"></param>
/// <param name="bx"></param>
/// <param name="by"></param>
/// <remarks>
/// <para>
/// 指定のテクスチャを転送先の(x,y)に半径rで描画します。
/// </para>
/// <para>
/// radの単位は、0~512で一周(2π)となる角度。
/// 回転の方向は、右まわり(時計まわり)。
/// rateは、拡大率。1.0ならば等倍。
/// (bx,by)は転送元の画像の、回転中心。
/// srcRectは転送元矩形。nullならば転送元テクスチャ全体。
/// </para>
/// </remarks>
public void BltRotate(ITexture src, int x, int y, Rect srcRect, int rad, float rate, int bx, int by)
{
if (src == null) return;
int sx, sy; // 転送元サイズ
if (srcRect == null)
{
srcRect = new Rect(0, 0, src.Width, src.Height);
}
{
sx = (int)(srcRect.Right - srcRect.Left);
sy = (int)(srcRect.Bottom - srcRect.Top);
}
if (sx == 0 || sy == 0) return;
int dx, dy; // 転送先サイズ
dx = (int)(sx * rate);
dy = (int)(sy * rate);
if (dx == 0 || dy == 0) return;
// 転送元の回転中心
bx = (int)(bx * rate);
by = (int)(by * rate);
// 転送後の座標を計算する
int nSin = SinTable.Instance.Sin(rad);
int nCos = SinTable.Instance.Cos(rad);
Point[] dstPoints = new Point[4];
// 0.5での丸めのための修正項 → 0x8000
int px = x + bx;
int py = y + by;
int ax0 = -bx;
int ay0 = -by;
dstPoints[0].X = Round.RShift((int)(ax0 * nCos - ay0 * nSin), 16) + px;
dstPoints[0].Y = Round.RShift((int)(ax0 * nSin + ay0 * nCos), 16) + py;
int ax1 = dx - bx;
int ay1 = -by;
dstPoints[1].X = Round.RShift((int)(ax1 * nCos - ay1 * nSin), 16) + px;
dstPoints[1].Y = Round.RShift((int)(ax1 * nSin + ay1 * nCos), 16) + py;
int ax2 = dx - bx;
int ay2 = dy - by;
dstPoints[2].X = Round.RShift((int)(ax2 * nCos - ay2 * nSin), 16) + px;
dstPoints[2].Y = Round.RShift((int)(ax2 * nSin + ay2 * nCos), 16) + py;
int ax3 = -bx;
int ay3 = dy - by;
dstPoints[3].X = Round.RShift((int)(ax3 * nCos - ay3 * nSin), 16) + px;
dstPoints[3].Y = Round.RShift((int)(ax3 * nSin + ay3 * nCos), 16) + py;
// 変数無駄な代入が多いが、最適化されるかなぁ(´Д`)
src.Blt(DrawContext, srcRect, dstPoints);
}
示例2: Blt
/// <summary>
/// 凸四角形→凸四角形への転送。
/// </summary>
/// <param name="src"></param>
/// <param name="srcPoint"></param>
/// <param name="dstPoint"></param>
public void Blt(ITexture src, Point[] srcPoint, Point[] dstPoint)
{
if (src != null)
src.Blt(DrawContext, srcPoint, dstPoint);
}