首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用SharpDX绘制二维矩形

用SharpDX绘制二维矩形
EN

Stack Overflow用户
提问于 2015-06-28 11:56:38
回答 1查看 6K关注 0票数 0

如何用SharpDX绘制纯红色的二维矩形?

  • 我有一个SharpDX.Direct3D9.从库中获得设备,它为我设置了一个Direct3D v9设备,所以我希望能够使用它?
  • 找到关于如何使用Direct2D1绘制基本矩形的教程,但代码似乎依赖于Direct3D11设备,而这一点我还没有--我需要能够在没有Direct3D11和Direct3D10的情况下完成工作 不安全int PresentHook(IntPtr devicePtr,SharpDX.Rectangle* pSourceRect,SharpDX.Rectangle* pDestRect,IntPtr hDestWindowOverride,IntPtr pDirtyRegion) { _isUsingPresent = true;SharpDX.Direct3D9.Device device =(SharpDX.Direct3D9 device)devicePtr;//如何在这里绘制矩形?if (pSourceRect == null == SharpDX.Rectangle.Empty *pSourceRect == SharpDX.Rectangle.Empty) device.Present();else { if (hDestWindowOverride = IntPtr.Zero) device.Present(*pSourceRect,*pDestRect,hDestWindowOverride);else device.Present(*pSourceRect,*pDestRect);}ReportSharpDX.Result.Ok.Code;}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-03 11:09:56

可以使用以下内容绘制雪碧:

代码语言:javascript
复制
// Be sure to only initialise these only once (or as needed)
// not every frame.

//use relative path
string dir = System.IO.Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
string filename = dir + @"\image.bmp";
var _mytext = SharpDX.Direct3D9.Texture.FromFile(device, filename);
var _sprite = new SharpDX.Direct3D9.Sprite(device);

float posLeft = 10f;
float posTop = 10f;
var pos = new SharpDX.Vector3(posLeft, posTop, 0);
var color = new SharpDX.ColorBGRA(0xffffffff);
_sprite.Begin(SharpDX.Direct3D9.SpriteFlags.AlphaBlend);
_sprite.Draw(_myText, color, null, null, pos);
_sprite.End();

以这种方式加载纹理将创建一个方形纹理,如果设备功能支持它,那么您可以在加载纹理时指定尺寸。

代码语言:javascript
复制
var _myText = SharpDX.Direct3D9.Texture.FromFile(device, filename, imageSize.Width, imageSize.Height, 0, Usage.None, Format.A8B8G8R8, Pool.Default, Filter.Default, Filter.Default, 0);

否则,您可以在转换中适当地缩放X和Y:

代码语言:javascript
复制
// Get image dimensions
Size imageSize;
using (var img = Image.FromFile(filename))
{
    imageSize = img.Size;
}
// Calculate scale to get correct image size
var transform = SharpDX.Matrix.AffineTransformation2D(1f, 0f, Vector2.Zero);
// Calculate width scale
if (imageSize.Width <= 128)
{
    transform.M11 = (float)imageSize.Width / 128f; // scale x
}
else if (imageSize.Width <= 256)
{
    transform.M11 = (float)imageSize.Width / 256f; // scale x
}
else if (imageSize.Width <= 512)
{
    transform.M11 = (float)imageSize.Width / 512f; // scale x
}
else if (imageSize.Width <= 1024)
{
    transform.M11 = (float)imageSize.Width / 1024f; // scale x
}
// Calculate height scale
if (imageSize.Height <= 128)
{
    transform.M22 = (float)imageSize.Height / 128f; // scale y
}
else if (imageSize.Height <= 256)
{
    transform.M22 = (float)imageSize.Height / 256f; // scale y
}
else if (imageSize.Height <= 512)
{
    transform.M22 = (float)imageSize.Height / 512f; // scale y
}
else if (imageSize.Height <= 1024)
{
    transform.M22 = (float)imageSize.Height / 1024f; // scale y
}

_sprite.Transform = transform;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31099504

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档