标签: system.drawing

如何在.NET 2.0中打开多帧TIFF图像格式图像?

Image.FromFile(@"path\filename.tif")
Run Code Online (Sandbox Code Playgroud)

要么

Image.FromStream(memoryStream)
Run Code Online (Sandbox Code Playgroud)

即使源是多帧TIFF文件,两者都只生成一帧的图像对象.如何加载保留这些帧的图像文件?逐帧使用Image.SaveAdd方法保存tiff.它们在其他查看器中工作,但.NET Image方法不会加载这些帧,只有第一个.

这是否意味着无法从我传入位图集合的方法返回多帧TIFF以用作帧?

c# system.drawing tiff

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

C#抽绳字母间距

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

g.DrawString("MyString", 
             new Font("Courier", 44, GraphicsUnit.Pixel), 
             Brushes.Black, 
             new PointF(262, 638));
Run Code Online (Sandbox Code Playgroud)

字母间距我指的是字母之间的距离.如果我添加了足够的空间,那么间距MyString可能看起来很像.

c# system.drawing

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

在.NET框架中,为什么有PointF(float)而没有"PointD"(double)?

谁能解释为什么在.NET框架中有PointF结构(使用单精度float类型)而没有"PointD"(使用双精度double类型)?

他们是否确定在System.Drawing命名空间中这样的精度永远不会有意义?还有其他原因吗?

.net floating-point double graphics system.drawing

12
推荐指数
1
解决办法
1062
查看次数

使用System.Drawing概述文本?

我有以下代码.有没有一种简单的方法来概述我正在写的文字?

 var imageEncoder = Encoder.Quality;
 var imageEncoderParameters = new EncoderParameters(1);
 imageEncoderParameters.Param[0] = new EncoderParameter(imageEncoder, 100L);

 var productImage = GetImageFromByteArray(myViewModel.ProductImage.DatabaseFile.FileContents);
 var graphics = Graphics.FromImage(productImage);

 var font = new Font("Segoe Script", 24);
 var brush = Brushes.Orange;

 var container = new Rectangle(myViewModel.ContainerX, myViewModel.ContainerY,                                      myViewModel.ContainerWidth,                                              myViewModel.ContainerHeight);

 var stringFormat = new StringFormat {Alignment = StringAlignment.Center, LineAlignment = StringAlignment.Center};

 graphics.DrawString(customizationText, font, brush, container, stringFormat);
Run Code Online (Sandbox Code Playgroud)

c# graphics system.drawing asp.net-mvc-2

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

我无法突破我的ClipRectangle,我想哭

当重写自定义控件的OnPaint方法时,我提供了一个PaintEventArgs,它包含一个Graphics对象和一个ClipRectangle.ClipRectangle对我的口味来说太小了,所以我想要将它扩展为100像素,或者完全忽略它.

无论我做什么,我似乎都无法突破ClipRectangle.到目前为止,我已经尝试过:

e.ClipRectangle.Inflate(100, 0);
e.Graphics.ResetClip();
e.Graphics.SetClip(new Rectangle(x, y, w, h));
Run Code Online (Sandbox Code Playgroud)

父控件调用Invalidate(true)(强制所有子控件的子控件失效).

我也做了一些谷歌搜索,看着鲍勃鲍威尔的网站,但找不到核武器.

ResetClip将Graphics对象的剪切区域重置为无限大的Rectangle,但Graphics对象高兴地继续使用提供的ClipRectangle.

救命.

c# system.drawing custom-controls winforms

12
推荐指数
2
解决办法
2783
查看次数

如何绘制子像素线

在下面的代码中,我试图绘制两条线:一条具有子像素宽度(0.5),另一条具有1px宽度:

        var img = new Bitmap(256, 256);
        Graphics graphics = Graphics.FromImage(img);
        graphics.SmoothingMode = SmoothingMode.AntiAlias;

        // Draw a subpixel line (0.5 width)
        graphics.DrawLine(new Pen(Color.Red, (float)0.5), 0, 100, 255, 110);

        // Draw a single pixel line (1 width)
        graphics.DrawLine(new Pen(Color.Red, (float)1), 0, 110, 255, 120);

        img.Save(@"c:\temp\test.png", ImageFormat.Png);

        graphics.Dispose();

        img.Dispose();
Run Code Online (Sandbox Code Playgroud)

但是,在生成的图像中,两条线显示相同的宽度:

在此输入图像描述

有没有办法让顶线出现亚像素(0.5px)?

编辑:经过一些研究,AGG可能是要走的路,其中有一个c#端口.

.net c# graphics system.drawing

12
推荐指数
2
解决办法
4180
查看次数

如何在图像上画线?

我想在bmp图像上绘制一条线,该线在C#中使用drawline方法传递给方法

public void DrawLineInt(Bitmap bmp)
{

Pen blackPen = new Pen(Color.Black, 3);

int x1 = 100;
int y1 = 100;
int x2 = 500;
int y2 = 100;
// Draw line to screen.
e.Graphics.DrawLine(blackPen, x1, y1, x2, y2);
}
Run Code Online (Sandbox Code Playgroud)

这给了一个错误.所以我想知道如何在这里包含paint事件(PaintEventArgs e)

并且还想知道在调用drawmethod时如何传递参数?例

DrawLineInt(Bitmap bmp);
Run Code Online (Sandbox Code Playgroud)

这会产生以下错误"当前上下文中不存在名称'e'"

c# system.drawing

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

如何在c#中使用投影/相机技术

我画了以下网格:

网格(顶视图)

使用以下两种方法绘制上述网格,一种用于计算网格,另一种用于计算每个单元格的中心:

//makes grid in picture box
private void drawGrid(int numOfCells, int cellSize, Graphics gr)
{
    Pen p = new Pen(Color.SteelBlue);

    for (int i = 0; i < Math.Sqrt(numOfCells) + 1; i++)
    {
        // Vertical
        gr.DrawLine(p, i * cellSize + 300, 200, i * cellSize + 300, 700);
        // Horizontal
        gr.DrawLine(p, 300, i * cellSize+200, 800, i * cellSize+200);
    }

    this.topology.SendToBack();
}


//draw the center point for each cell of the grid 
private void drawCenters(Graphics gr)
{
    for (int j …
Run Code Online (Sandbox Code Playgroud)

c# system.drawing graph-drawing drawing2d

12
推荐指数
1
解决办法
814
查看次数

避免配置系统定义的Pen和Brush实例

我理解最好在PenBrush实例上调用Dispose(),除非它们已经设置为系统预定义值(例如System.Drawing.Brushes, System.Drawing.PensSystem.Drawing). SystemBrushes)

尝试处置系统定义的资源会导致抛出异常.

除了在try/catch中包装Dispose()调用之外,这些资源中的一个是否引用了系统定义的值或用户定义的值,这似乎并不明显.

system.drawing gdi+ idisposable winforms

11
推荐指数
3
解决办法
1735
查看次数

Bitmap类不配置流?

因此,在发现Bitmap类期望原始流在图像或位图的生命周期内保持打开之后,我决定找出Bitmap类在处理时是否实际关闭了流.

查看源代码,Bitmap和Image类创建一个GPStream实例来包装流,但不存储对GPStream或Stream实例的引用.

num = SafeNativeMethods.Gdip.GdipLoadImageFromStreamICM(new GPStream(stream), out zero);
Run Code Online (Sandbox Code Playgroud)

现在,GPStream类(内部)没有实现Release或Dispose方法 - 什么都不允许GDI关闭或处理流.由于Image/Bitmap类没有保留对GPStream实例的引用,因此GDI,Drawing.Bitmap或Drawing.Stream似乎无法正确关闭流.

我可以继承Bitmap来解决这个问题,但是,等等,它是密封的.

请告诉我,我错了,并且MS不仅无法编写不会泄漏API资源的代码.

请记住(a),Bitmap 没有对流的管理引用,这意味着GC将在它仍在使用时收集它,并且(b).NET API采用位图/图像引用,并且不确定它们何时是完成他们.

.net c# system.drawing gdi+ memory-leaks

11
推荐指数
1
解决办法
3765
查看次数