问题标签 [system.drawing]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
22493 浏览

c# - 从 RGB 格式的文件中加载位图(无 alpha)

我只是想加载一个 .BMP 文件并获取 24 位 RGB 格式(或 32 位 RGB 格式)的位图对象。

我尝试的所有方法都返回一个 PixelFormat = Format32bppArgb 的位图/图像对象。即使当然 BMP 没有 alpha。

我目前通过将第一个对象复制到内存位图中的另一个 24 位 RBG 来解决该问题。

有没有一种方法可以做到这一点?

谢谢

0 投票
1 回答
566 浏览

.net - 在设置中使用时 RotateFlipType 值错误

我正在尝试在我的设置文件中使用 System.Drawing.RotateFlipType。此屏幕截图总结了我的问题:

替代文字 http://l-2.incito.hr/rotatefliptype.png

每个 RotateFlipType 值都加倍,并且缺少一些。如果我尝试使用一些缺失值(例如 Rotate180FlipX,通过 app.config) - 它会被忽略。

在 Windows 7 上使用带有 SP1 的 VS2008、带有框架 3.5 的 vb.net。

0 投票
2 回答
6728 浏览

asp.net - .net Drawing.Graphics.FromImage() 返回空白黑色图像

我正在尝试在 asp.net 中重新缩放上传的 jpeg

所以我去:

无论我给它什么文件,这都会保存一个原始的黑色 jpeg。虽然如果我将输入图像流立即放入done位图中,它会重新压缩并保存它,例如:

我必须用g做一些魔法吗?

更新:我试过:

同样的故事 - 正确尺寸的纯黑色

0 投票
4 回答
19507 浏览

c# - C# 拉绳字母间距

使用 Graphics.DrawString 时是否可以以某种方式控制字母间距?我找不到任何允许我这样做的 DrawString 或 Font 重载。

字母间距是指字母之间的距离。如果我添加了足够的空间,MyString 可能看起来像 M y S 字符串。

0 投票
4 回答
24703 浏览

c# - 在透明像素上使用 DrawString 渲染错误的文本

将文本渲染为位图时,我发现在具有非不透明 alpha 的区域顶部渲染时,文本看起来很糟糕。随着底层像素变得更加透明,问题越来越严重。如果我不得不猜测,我会说当底层像素是透明的时,文本渲染器会将任何抗锯齿的“灰色”像素绘制为纯黑色。

以下是一些截图:

在透明像素上绘制的文本:

替代文字

在半透明像素上绘制的文本:

替代文字

在不透明像素上绘制的文本:

替代文字

这是用于呈现文本的代码:

0 投票
1 回答
4175 浏览

c# - c# winforms - 带有矩形的可滚动面板

我是winforms的新手,并试图在没有运气的情况下找到以下问题的答案......

我在 winforms 中有一个面板,并在其中添加了一个比面板本身更宽的矩形。我已将面板 AutoScroll 属性设置为 true,但面板水平滚动条从未出现。为什么是这样?以及如何让滚动条滚动?

这是我添加矩形的代码:

如果我将 Label 控件添加到面板并为其提供超出面板边界的文本值 - 然后自动滚动有效,但不适用于矩形。

非常感谢。

0 投票
1 回答
557 浏览

winforms - 如何从包含“轮廓”的路径创建剪辑区域?

我正在创建一个圆角矩形 GraphicsPath(请参见下面的红色轮廓图),然后在绘制图形时将其用作剪辑区域,并用作表单的区域。

不幸的是,虽然路径看起来不错,但它不能作为一个区域很好地工作(见下面的纯黑色图像)

有没有一种方法可以从包含路径的所有“轮廓”像素的路径生成剪切区域?我是否需要生成位图,然后对其进行处理以创建区域?

圆角矩形路径:

圆角矩形

用作剪辑区域时:

剪辑区域

差异(红色像素在路径轮廓中,但在区域之外。蓝色像素在两者中):

重叠

0 投票
1 回答
2881 浏览

.net - 使用 Image.FromHbitmap() 构造位图时,多久可以删除原始位图句柄?

http://msdn.microsoft.com/en-us/library/k061we7x%28VS.80%29.aspxImage.FromHbitmap()的文档:

FromHbitmap 方法制作 GDI 位图的副本;因此您可以在创建新图像后立即使用 GDIDeleteObject 方法释放传入的 GDI 位图。

这非常明确地表明,一旦创建 Bitmap 实例,就可以立即使用 DeleteObject 删除位图句柄。

然而,查看Image.FromHbitmap()with Reflector 的实现表明它是 GDI+ 函数的一个非常薄的包装器,GdipCreateBitmapFromHBITMAP().

关于 GDI+ 平面 API 函数的文档很少,但http://msdn.microsoft.com/en-us/library/ms533971%28VS.85%29.aspx说这GdipCreateBitmapFromHBITMAP()对应于Bitmap::Bitmap()采用 anHBITMAPHPALETTEas的构造函数参数。

此版本的Bitmap::Bitmap()构造函数在http://msdn.microsoft.com/en-us/library/ms536314%28VS.85%29.aspx的文档有这样的说法:

您负责删除 GDI 位图和 GDI 调色板。但是,在 GDI+ Bitmap::Bitmap 对象被删除或超出范围之前,您不应删除 GDI 位图或 GDI 调色板。

不要将当前(或以前)选择到设备上下文中的 GDI 位图或 GDI 调色板传递给 GDI+ Bitmap::Bitmap 构造函数。

此外,可以在 GdiPlusBitmap.h 中 GDI+ 的 C++ 部分的源代码中看到,所讨论的Bitmap::Bitmap()构造函数本身就是GdipCreateBitmapFromHBITMAP()来自平面 API 的函数的包装器:

我不能轻易看到的是GdipCreateBitmapFromHBITMAP()该功能的核心的实现,但是文档中的两个注释似乎是矛盾的。.Net 文档说我可以立即删除位图句柄,而 GDI+ 文档说必须保留位图句柄,直到删除包装对象,但两者都基于相同的 GDI+ 函数。

此外,GDI+ 文档警告不要使用当前或以前选择到设备上下文中的源 HBITMAP。虽然我可以理解为什么当前不应该将位图选择到设备上下文中,但我不明白为什么会有警告不要使用以前选择到设备上下文中的位图。这似乎会阻止使用已使用标准 GDI 在内存中创建的 GDI+ 位图。

所以,总结一下:

  1. 是否需要保留原始位图句柄,直到 .Net Bitmap 对象被释放?
  2. GDI+ 函数GdipCreateBitmapFromHBITMAP()是复制源位图还是仅保留原始位图的句柄?
  3. 为什么我不应该使用之前选择到设备上下文中的 HBITMAP?
0 投票
1 回答
538 浏览

c# - 在写入磁盘之前获取修改后图像的文件大小

我正在进行从.jpg.png的转换System.Drawing,我发现的一件事是这种转换往往会使转换后的.png.jpg原始文件大得多。转换为.png后有时会大 10 倍以上。

鉴于情况似乎总是如此(除非您知道解决此问题的方法),有没有办法在将.png保存到磁盘之前确定它的文件大小?例如,也许先将其写入流,然后获取该流大小?我该怎么做呢?

0 投票
4 回答
67940 浏览

c# - 在c#中通过颜色代码设置颜色

我正在尝试在 c# 代码中添加颜色,例如使用以下颜色代码。

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

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

系统.Windows.媒体

有人可以给我一个例子吗

系统绘图

所以我可以做以下事情:

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

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