标签: drawstring

图形DrawString与受控的Word Wrap

基本上我的问题是我需要在需要时自动换行.不是.NET想要的时候.据我所知,如果我给它一个矩形来绘制,DrawString方法将自动自动换行.我需要控制它什么时候自动换行.所以我要说的是我想要绘制的字符串是Testing 1234.而且我想在看到空格时在新行上绘制文本.所以在这种情况下它会有两行 - 测试和1234.我猜我需要重新调整字符串的大小(以适应我的边界)和多个drawtring方法调用来绘制每一行.问题是我真的不知道该怎么做.对于GDI +,我是新手.

.net gdi+ drawstring

5
推荐指数
1
解决办法
3715
查看次数

确定位图大小以保存文本字符串

我想要做的是使用DrawString()方法将字符串绘制到位图.为此,我需要创建一个位图并从位图中获取Graphics对象,然后在该Graphics对象上调用DrawString().

问题是,我怎么知道,在我创建初始位图时,有多少像素宽和长来制作我的位图?

我知道这与MeasureString()有关,但是为了使用MeasureString(),我需要从位图中获取Graphics对象.在我创建位图之前我无法做到这一点,直到我知道尺寸才能做到这一点.这似乎是一个循环的悖论!

有人请帮我解决这个问题吗?

c# graphics bitmap drawstring winforms

5
推荐指数
1
解决办法
1428
查看次数

Affine Transform如何在Java中发挥作用?

我一直在使用Affine Transform在我的java项目中旋转一个String,而我还不是一个经验丰富的程序员,所以我花了很长时间做一个看似很小的任务.旋转一个字符串.

现在我终于得到了或多或少的工作,正如我所希望的那样,除非它没有像我想要的那样精确地完成......

由于经过了大量的反复试验并阅读了仿射变换的描述,我仍然不太清楚它到底是做什么的.我想我现在所知道的是,我取一个字符串,并定义字符串的中心(或我想要旋转的点),但是矩阵在哪里?(显然我不知道嘿嘿)

任何人都可以试着向我解释仿射变换是如何工作的,换句话说就是java doc?也许它可以帮助我调整我的实现,而且,我真的很想知道:)

提前致谢.

java drawstring rotation matrix affinetransform

5
推荐指数
1
解决办法
1万
查看次数

使用GDI渲染OTF字体的TextRenderer.DrawText?

我正在尝试在位图图像上绘制文本,我做了一些研究,发现.NET/GDI +不支持OTF字体.我在某处读到了你可以用TextRenderer.DrawTextGDI渲染OTF字体的地方,但我似乎无法弄清楚如何,质量也没有比较Graphics.DrawString.

  1. 首先,是否可以在VS中使用OTF字体或者我是否错误地阅读了某些内容?

  2. 其次,如果答案是TextRenderer.DrawText,我该如何使用OTF字体?看起来我必须使用System.Drawing.Font该类,但我不认为那些支持字体,这是问题,对吗?

  3. 如何使用GDI +(Graphics.DrawString)使字体像TTF字体一样清晰地呈现

  4. 使用Graphics.DrawString我能够使用RectangleF(具有指定的宽度,0高度)作为我的文本的边界,并正确包装文本.随着TextRenderer.DrawText,使用的能力RectangleF消失,只允许Rectangle哪些似乎不允许0高度,同时仍然允许文本显示(即文本必须在矩形内,文本包装不起作用).我做错了吗?

任何帮助将不胜感激.如果无法做到这一点,有没有办法转换OTF字体,或在TTF版本中在线找到Gotham字体系列?我真的需要这些字体!

graphics gdi+ drawstring textrenderer drawtext

5
推荐指数
0
解决办法
904
查看次数

使用DrawString将单个角色居中

我已经尝试了所有建议的方法来居中文本,但我似乎无法得到我想要的结果,同时居中一个人的角色.

我有一个矩形.在那个矩形中,我用DrawEllipse绘制一个圆圈.现在我想使用相同的矩形和DrawString在圆圈内绘制一个单个字符,使其完美居中.

这是我的基本代码:

StringFormat stringFormat = new StringFormat();
stringFormat.Alignment = StringAlignment.Center;
stringFormat.LineAlignment = StringAlignment.Center;

using (Graphics g = Graphics.FromImage(xImage))
{
    g.SmoothingMode = SmoothingMode.AntiAlias;
    g.TextRenderingHint = TextRenderingHint.AntiAlias;
    g.CompositingQuality = CompositingQuality.HighQuality;
    g.InterpolationMode = InterpolationMode.HighQualityBicubic;
    g.PixelOffsetMode = PixelOffsetMode.HighQuality;

    g.FillEllipse(fillBrush, imageRect.X, imageRect.Y, imageRect.Width - 1, imageRect.Height - 1);

    g.DrawString(Text, font, Brushes.White, imageRect, stringFormat);
}
Run Code Online (Sandbox Code Playgroud)

文本水平居中......但它没有正确地居中.使用像大写"I"这样的对称字符,我发现字符的顶部总是比字符的底部更接近矩形的边缘.距离可能至少增加50%.

我假设它正在为字符测量足够的空间,比如小写的"j",它会挂得更低.但是,由于我试图用单个字母创建一个图形图标,我想要更精确的居中.

c# gdi+ drawstring winforms centering

5
推荐指数
1
解决办法
2129
查看次数

Windows DPI设置会影响Graphics.DrawString

我创建了一个新的Bitmap对象,现在想要使用GDI +绘制一些文本.所以我调用Graphics.DrawString(...).

问题是字符串的大小取决于Windows 7的DPI设置.有没有办法让我的文字绘图独立于Windows设置?

PS:DPI设置似乎只影响文本.例如,当更改DPI时,矩形尺寸相同...

c# gdi+ drawstring dpi

5
推荐指数
1
解决办法
3155
查看次数

Gdiplus DrawString通过远程桌面绘制透明文本

我正在将文本绘制到DIB部分的屏幕外位图,该位图深度为32位并使用alpha通道(ARGB).我将像素直接绘制到内存中.然后,我创建一个Gdiplus Graphics对象,将我的内存DC传递给它,并使用Graphics :: DrawString绘制文本.这在正常情况下工作正常.但是,在远程桌面上,渲染的文本是完全透明的,即不是绘制任何颜色像素,而是可以看到文本的位置.有谁知道为什么会这样,以及如何解决它?

这是我的drawString例程:

void SplashScreen::drawString (MyString &ivText, Gdiplus::RectF &r, 
  Gdiplus::ARGB c, Gdiplus::StringAlignment align, Gdiplus::Font &fnt,
  Gdiplus::Graphics &gfx)
  {
  Gdiplus::StringFormat fmt;
  fmt.SetAlignment (align);
  Gdiplus::SolidBrush brush (c);
  wchar_t *wstr = new wchar_t [ivText.length()+1];
  std::mbstowcs (wstr, ivText.cstr(), ivText.length()+1);
  gfx.DrawString (wstr, ivText.length(), &fnt, r, &fmt, &brush);
  delete wstr;
  }
Run Code Online (Sandbox Code Playgroud)

这就是我创建DIB的方式:

BITMAPV5HEADER bhd;
memset (&bhd, 0, sizeof (bhd));
bhd.bV5Size = sizeof (BITMAPV5HEADER);
bhd.bV5Width = nWidth;
bhd.bV5Height = -nHeight;  // negative height indicates top-down DIB
bhd.bV5Planes = 1;
bhd.bV5BitCount = 32;
bhd.bV5Compression = BI_BITFIELDS; …
Run Code Online (Sandbox Code Playgroud)

c++ gdi+ remote-desktop drawstring

5
推荐指数
1
解决办法
1862
查看次数

C#单字体字符大小?

这与字符串的大小无关.

我指定了绘制字符串的字体.现在我需要1个字符的精确宽度(以像素为单位).我只允许具有静态字符宽度的字体(W和i在绘制时具有相同的宽度).如果我使用大小为10的"Consolas",我的估计宽度为7.75f.我可以直接以某种方式检索此信息吗?

绘图时我不需要这些信息,但是当我想设置光标位置等时,我不知道光标下面有什么文字.

编辑: MeasureString给我11.99653作为字符宽度.不知道为什么.但我不能使用这个值.我估计7.75f而且非常精确.如果我想改变字体大小,我会遇到麻烦.

c# fonts drawstring

5
推荐指数
1
解决办法
2394
查看次数

Graphics.DrawString突出显示特定单词

Graphics.DrawStringObjectListView中使用.我需要突出显示字符串中的一些单词(使其背景为黄色).可以这样做吗?

在使用之前Graphics.DrawString,我可以使用DefaultRenderer突出显示.但现在它不起作用.

Graphics.DrawString这里使用Task List样本

c# graphics drawstring highlight objectlistview

5
推荐指数
2
解决办法
1389
查看次数

Graphics.drawString()绘制我的旧字符串

我正在研究简单的计数器.我的问题是drawString()方法在旧的字符串上绘制新的字符串.以前如何清除旧的?码...

package foobar;

import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JPanel;

public class board extends JPanel implements Runnable {

    Thread animator;
    int count;

    public board() {
        this.setBackground( Color.WHITE );
        count = 0;
        animator = new Thread( this );
        animator.start();
    }

    @Override
    public void run() {
        while( true ) {
            ++count;
            repaint();
            try {
                animator.sleep( 1000 );
            } catch ( InterruptedException e ) {}
        }
    }

    @Override
    public void paint( Graphics Graphics ) {
        Graphics.drawString( Integer.toString( count ), 10, 10 );
    }
} …
Run Code Online (Sandbox Code Playgroud)

java graphics awt drawstring

4
推荐指数
1
解决办法
2万
查看次数