标签: system.drawing

使用Graphics.DrawString时动态调整字体大小以适应空间

有没有人有提示,而你可以动态调整字体大小以适应特定区域?例如,我有一个800x110的矩形,我想用最大尺寸字体填充它,这将支持我试图显示的整个字符串.

Bitmap bitmap = new Bitmap(800, 110);

using (Graphics graphics = Graphics.FromImage(bitmap))
using (Font font1 = new Font("Arial", 120, FontStyle.Regular, GraphicsUnit.Pixel))
{
    Rectangle rect1 = new Rectangle(0, 0, 800, 110);

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

    graphics.TextRenderingHint = TextRenderingHint.ClearTypeGridFit;
    graphics.DrawString("Billy Reallylonglastnameinstein", font1, Brushes.Red, rect1, stringFormat);
} 

bitmap.Save(Server.MapPath("~/Fonts/" + System.Guid.NewGuid() + ".png"));
Run Code Online (Sandbox Code Playgroud)

显然,整个名称不会在大字体大小提供的空间中呈现.必须有一个简单的方法来做到这一点?

.net c# fonts system.drawing

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

通过c#中的颜色代码设置颜色

我试图在c#代码中添加颜色,例如以下颜色代码.

ListTreeView.Background = new SolidColorBrush(Colors.White);

这是工作..但我想将此颜色添加为颜色代码,所以我添加为

System.Windows.Media

有人可以给我一个例子

System.Drawing中

所以我可以做到以下几点:

ListTreeView.Background = ColorTranslator.FromHtml("#FFE7EFF2");

这给了我错误; 有任何想法吗?

c# system.drawing

15
推荐指数
2
解决办法
6万
查看次数

.NET中的热图样式渐变

我正在尝试使用与此类似的渐变创建热图: 在此输入图像描述

此图像显示三个点,渐变很好地融合在一起.

这是我目前在绘图功能中所做的事情:

public void DrawGradient(int x, int y, Graphics g) {
    using (var ellipsePath = new GraphicsPath()) {

    var bounds = new Rectangle(x, y, 100, 100);
    ellipsePath.AddEllipse(bounds);
    var brush = new PathGradientBrush(ellipsePath);
    Color[] colors = { 
           Color.FromArgb(64, 0, 0, 255), 
           Color.FromArgb(140, 0, 255, 0), 
           Color.FromArgb(216, 255, 255, 0), 
           Color.FromArgb(255, 255, 0, 0) 
       };
    float[] relativePositions = {0f,0.25f,0.5f, 1.0f};
    ColorBlend colorBlend = new ColorBlend();
    colorBlend.Colors = colors;
    colorBlend.Positions = relativePositions;
    brush.InterpolationColors = colorBlend;

    g.CompositingMode = System.Drawing.Drawing2D.CompositingMode.SourceOver;
    g.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
    g.SmoothingMode …
Run Code Online (Sandbox Code Playgroud)

.net c# system.drawing gradient alphablending

15
推荐指数
1
解决办法
3269
查看次数

我在 Linux 上使用 .NET Core 和 C#,并且缺少库 *System.Drawing*

错误信息

Program.cs(1,14):错误CS0234:命名空间“System”中不存在类型或命名空间名称“Drawing”(您是否缺少程序集引用?

有可能解决这个问题吗?或者如果我在 Linux 上使用 C# 进行开发,我并不打算使用这个库?

c# system.drawing .net-core .net-standard

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

在类库(.NET标准)中找不到位图类

您好
我想创建一个类库(.NET标准),我正在使用System.Drawing,但是我收到错误:

CS0246 C# The type or namespace name 'Bitmap' could not be found 
(are you missing a using directive or an assembly reference?)
Run Code Online (Sandbox Code Playgroud)

我正在使用.NET Standard 2.0.谢谢.

c# system.drawing class-library bitmap

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

如何迭代.gif图像中的每个像素?

我需要逐步浏览.gif图像并确定每个像素的RGB值,x和y坐标.有人能给我一个如何实现这个目标的概述吗?(方法,要使用的命名空间等)

c# system.drawing

14
推荐指数
2
解决办法
9219
查看次数

.net2.0 vs .net 4.0 gdi +差异?

我有一个非常奇怪的问题,我有一个应用程序,它做了很多涉及GDI +操作图片.如裁剪缩放等我的应用程序在.net 2.0中工作正常,但在.net 4.0我收到来自我的用户的报告,它崩溃了gdi +"内存不足"错误.现在我知道"内存不足"gdi +错误是一个很好的错误,但为什么它会在.net 2.0而不是.net 4上工作.

具体来说,我有一个控件,可以在彼此的顶部绘制"图层",以创建一个组合的位图.这个控件在.net 2.0中运行得很好而在.net 4中运行不正常.

当我从文件系统加载了一个1000万像素的jpeg并且我正在应用缩放和变换到图像时,它会发生这种情况.

提供更多细节.g.draw的矩阵比例为4意味着任何旋转都会增加400%将返回"内存不足错误".

它只发生在xp盒子而不是Windows 7盒子上.这可能有什么不同?

任何接受者......

这是从捕获的异常中记录的堆栈跟踪的范围.

  <Event>
    <TimeStamp>11/30/10 11:02:43.706</TimeStamp>
    <Source>APPro2</Source>
    <EventType>Error</EventType>
    <Message><![CDATA[##: OutOfMemoryException
Message:
Out of memory.

Stack Trace:
   at System.Drawing.Graphics.CheckErrorStatus(Int32 status)
   at System.Drawing.Graphics.DrawImage(Image image, Rectangle destRect, Int32 srcX, Int32 srcY, Int32 srcWidth, Int32 srcHeight, GraphicsUnit srcUnit, ImageAttributes imageAttrs, DrawImageAbort callback, IntPtr callbackData)
   at System.Drawing.Graphics.DrawImage(Image image, Rectangle destRect, Int32 srcX, Int32 srcY, Int32 srcWidth, Int32 srcHeight, GraphicsUnit srcUnit, ImageAttributes imageAttr)
   at Colorvision.Graphics.Layers.Picture.DrawBig(Graphics g) in D:\Colorvision_Workspaces\Colorvision\Graphics\Layers\Picture.cs:line 321
   at Colorvision.Graphics.LayerCollection.DrawBig(Graphics e) …
Run Code Online (Sandbox Code Playgroud)

.net graphics system.drawing gdi+

14
推荐指数
1
解决办法
1899
查看次数

使用C#和远程桌面问题进行屏幕截图

我有一个C sharp控制台应用程序,可以多次捕获MS Word文档的屏幕截图.它工作得很好,但是当我将这个应用程序放在一个远程的Windows XP机器上它工作正常,我远程桌面是可见的,但如果我运行我的应用程序并离开远程桌面(最小化,甚至没有注销我想要做的)截图是空白的!

屏幕截图应用程序由作为SYSTEM用户运行的服务运行.

即使没有连接用户,如何让GUI保持活动状态?

这是我使用的代码:

public Image CaptureWindow(IntPtr handle)
{
    // get te hDC of the target window
    IntPtr hdcSrc = User32.GetWindowDC(handle);
    // get the size
    User32.RECT windowRect = new User32.RECT();
    User32.GetWindowRect(handle, ref windowRect);
    int width = windowRect.right - windowRect.left;
    int height = windowRect.bottom - windowRect.top;
    // create a device context we can copy to
    IntPtr hdcDest = GDI32.CreateCompatibleDC(hdcSrc);
    // create a bitmap we can copy it to,
    // using GetDeviceCaps to get the width/height
    IntPtr …
Run Code Online (Sandbox Code Playgroud)

.net c# windows system.drawing remote-desktop

14
推荐指数
1
解决办法
6554
查看次数

.NET:Graphics.DrawImageUnscaled做了什么?

这是不为人所熟知的是,如果你画的图像,例如:

graphics.DrawImage(image, top, left);
Run Code Online (Sandbox Code Playgroud)

图像将被缩放.这是因为DrawImage查看图像的dpi设置(例如来自photoshop的72dpi),并缩放图像以匹配目标显示(通常为96dpi).

如果要在不进行任何缩放的情况下绘制图像,则必须明确指定DrawImage图像的大小:

graphics.DrawImage(img, top, left, img.Width, img.Height);
Run Code Online (Sandbox Code Playgroud)

我从GDI +的多年编程中了解到这一点.System.Drawing围绕GDI + 的.NET 包装器中存在相同的事实- 如果要绘制未缩放的图像,则必须强制它缩放到原始大小.

这就是为什么我DrawImageUnscaled在.NET中找到一个方法给我留下了深刻的印象:

graphics.DrawImageUnscaled(img, top, left);
Run Code Online (Sandbox Code Playgroud)

除了图像仍然缩放; 使它与:

graphics.DrawImage(img, top, left);
Run Code Online (Sandbox Code Playgroud)

如果你想绘制一个未缩放的图像,你必须继续打电话:

graphics.DrawImage(img, top, left, img.Width, img.Height);
Run Code Online (Sandbox Code Playgroud)

这让我DrawImageUnscaled想到了一个问题:如果不画一幅未缩放的图像怎么办?

来自MSDN

也可以看看

.net system.drawing gdi+ winforms

14
推荐指数
1
解决办法
5275
查看次数

比较两个Color对象

这个C#,VS2010和.NET 4.0.我想比较两个System.Drawing.Color对象.

价值mStartColor.ToArgb()16777215.

价值Color.Transparent.ToArgb()16777215.

价值mStartColor <> Color.TransparentTrue.

如何为Color对象实现平等?

编辑

感谢大家.我得到了答案,虽然这对我没有多大意义(请参阅我对蒂姆和戴夫下面的答案的评论).我将蒂姆的帖子标记为答案,他是第一个回答,但戴夫的回答同样有用.

.net c# system.drawing colors

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