我正在使用.NETCF(Windows Mobile)Graphics类和DrawString()方法将单个字符渲染到屏幕上.
问题是我似乎无法使其正确居中.无论我为字符串渲染的位置的Y坐标设置什么,它总是低于该值,文本大小越大Y偏移越大.
例如,在文本大小12处,偏移量约为4,但在32处,偏移量约为10.
我希望角色垂直占据它所绘制的大部分矩形并水平居中.这是我的基本代码.this引用正在绘制的用户控件.
Graphics g = this.CreateGraphics();
float padx = ((float)this.Size.Width) * (0.05F);
float pady = ((float)this.Size.Height) * (0.05F);
float width = ((float)this.Size.Width) - 2 * padx;
float height = ((float)this.Size.Height) - 2 * pady;
float emSize = height;
g.DrawString(letter, new Font(FontFamily.GenericSansSerif, emSize, FontStyle.Regular),
new SolidBrush(Color.Black), padx, pady);
Run Code Online (Sandbox Code Playgroud)
是的,我知道我可以使用标签控件来设置居中,但实际上我需要在Graphics课堂上手动完成.
我实际上有两个问题:
对于长长的清单感到抱歉,但为了学习,我想探索两种方法......
我需要将一些文本添加到现有的表格图像(png).这意味着我需要在图像上"写",我需要选择文本位置.我该怎么做?非常感谢你.
我想在C中进行图形编程.我已经搜索了很多关于编译器的信息,该编译器提供了丰富的函数,用于在C语言中进行GUI编程,但我找不到任何东西.
基本上我想绘制按钮然后接受用户的选择并采取适当的行动.如果你可以建议一个C编译器,或者我可以添加到我的编译器的库,将会很有帮助.我正在使用Windows操作系统.
目前,我使用的TURBO C编译器不支持创建按钮的直接方法.任何帮助,将不胜感激.
从着色器中的深度缓冲区进行采样,返回0到1之间的值,如预期的那样.给定相机的近平面和远平面平面,如何计算此时的真实z值,即距相机的距离?
我目前正在使用Bezier曲线和曲面来绘制着名的犹他州茶壶.使用16个控制点的Bezier贴片,我已经能够绘制茶壶并使用"世界到相机"功能显示它,这使得能够旋转生成的茶壶,并且目前正在使用正交投影.
结果是我有一个"扁平"茶壶,预计正投影的目的是保持平行线.
但是,我想使用透视投影来给出茶壶深度.我的问题是,如何从"世界到相机"函数返回3D xyz顶点,并将其转换为2D坐标.我想在z = 0时使用投影平面,并允许用户使用键盘上的箭头键确定焦距和图像大小.
我在java中编程并设置了所有输入事件处理程序,并且还编写了一个处理基本矩阵乘法的矩阵类.我已经阅读了维基百科和其他资源一段时间,但我无法完全了解如何执行此转换.
我想在Qt UI中显示.jpg图像.我在网上查了一下,发现了http://qt-project.org/doc/qt-4.8/widgets-imageviewer.html.我认为Graphics View也会这样做,而且它还有编解码器来显示视频.如何使用Graphics View显示图像?我经历了图书馆,但因为我是Qt的全新人,所以我找不到开头的线索.你能指导一下如何在Qt中加载和显示图像的资源/示例吗?
谢谢.
我们正在使用XNA开发一个自上而下的RPG.最近我们在编写显示地图的代码时陷入了挫折.在绘制地图时,使用正常变换矩阵的自上而下视图,一切似乎都很好.当使用非平面变换矩阵时,例如挤压顶部或底部以模拟深度,当相机改变位置时,出现黑线(顶部或底部的行,当向左或向右挤压时的列).移动和放置似乎是随机的.(图片进一步提供.)
地图由瓷砖组成.原始纹理具有由32x32像素组成的图块.我们通过创建2个三角形并在这些三角形上显示原始纹理的一部分来绘制切片.着色器为我们做了这个.有三层三角形.首先,我们绘制所有不透明的瓷砖和所有半透明和部分透明瓷砖的所有不透明像素,然后是所有半透明和部分透明的瓷砖和像素.这样可以正常工作(但是当我们使用浮点因子进行缩放时,有时颜色混合的线条位于切片行和/或列之间).
我们对所有瓷砖使用相同的rasterizerState,并且在绘制实体或半透明瓷砖时我们在两者之间切换.
_rasterizerState = new RasterizerState();
_rasterizerState.CullMode = CullMode.CullCounterClockwiseFace;
_solidDepthState = new DepthStencilState();
_solidDepthState.DepthBufferEnable = true;
_solidDepthState.DepthBufferWriteEnable = true;
_alphaDepthState = new DepthStencilState();
_alphaDepthState.DepthBufferEnable = true;
_alphaDepthState.DepthBufferWriteEnable = false;
Run Code Online (Sandbox Code Playgroud)
在阴影中,我们将SpriteBlendMode设置如下:
第一个固体层1使用
AlphaBlendEnable = False;
SrcBlend = One;
DestBlend = Zero;
Run Code Online (Sandbox Code Playgroud)
所有其他实心和透明层(稍后绘制)使用
AlphaBlendEnable = True;
SrcBlend = SrcAlpha;
DestBlend = InvSrcAlpha;
Run Code Online (Sandbox Code Playgroud)
其他着色器也使用它.在SpriteBatch为SpriteFonts使用的,使用默认设置.
一些图块即时生成并保存到文件中.加载地图时会加载该文件.这是使用RenderTarget如下创建完成的:
RenderTarget2D rt = new RenderTarget2D(sb.GraphicsDevice, 768, 1792, false,
SurfaceFormat.Color, DepthFormat.None);
sb.GraphicsDevice.SetRenderTarget(rt);
Run Code Online (Sandbox Code Playgroud)
生成后,文件将被保存并加载(因此,当设备重置时,我们不会丢失它,因为它不再存在于a RenderTarget).我尝试使用mipmapping,但它是一个spritesheet.没有关于瓷砖放置位置的信息,因此mipmapping是无用的,并没有解决问题.
我们遍历每个位置.这里没有浮点,但位置是Vector3(Float3).
for (UInt16 …Run Code Online (Sandbox Code Playgroud) 我想将a缩放System.Drawing.Bitmap到至少小于某个固定的宽度和高度.这是为网站上的图库创建缩略图,所以我想保持纵横比相同.
我有一些解决方案,但似乎没有一个真正做我需要的; 它们围绕着基于保持宽度或高度相同但不改变两者的缩放而展开.
一个例子:
如果我有一个4272 x 2848图像,并且我想将其缩放到1024 x 768的大小,那么生成的图像应该是1024 x 683并填充(带黑色边框)到1024 x 768.
如何处理大于所需尺寸且小于要求尺寸的图像,以及填充图像,这些图像在缩放后不会达到我需要的确切尺寸?