标签: system.drawing

三角列表的路径(.NET/C#)

给定一个表示为2d点数组的路径:

Point[] path = new Point[4]
{
    new Point(0,0),
    new Point(10,0),
    new Point(10,10),
    new Point(0,10),
};
Run Code Online (Sandbox Code Playgroud)

......这里是一个盒子.

将此转换为要在3D应用程序中使用的三角形列表(填充路径)的最佳方法是什么?鉴于这只是一个简单的例子,实际上道路可能相当复杂.框架中是否有任何东西,可能是System.Drawing或在WPF中有哪些可以帮助解决这个问题?

编辑:(在塞缪尔的评论之后)理想情况下,我希望能够处理凸多边形和凹多边形,否则图形必须手动上升许多凸多边形.

.net c# system.drawing

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

为什么使用System.Drawing创建的JPEG图像比原始位图大?

我有一个奇怪的问题 - 我有大约1450万个位图图像,据说是未压缩的.我需要将这些位图转换为JPG并将它们存储在数据库中.

当我使用.NET System.Drawing库中提供的类将位图保存为ImageFormat.Jpeg时,生成的JPEG 大小是原始位图大小的两倍.这是代码:

byte[] bitmapBytes = //get from the db
using(MemoryStream bitmapStream = new MemoryStream(bitmapBytes))
{
   using(Bitmap bitmap = (Bitmap)Bitmap.FromStream(bitmapStream))
   {
       bitmap.Save("jpg.jpg", ImageFormat.Jpeg);
   }
}
Run Code Online (Sandbox Code Playgroud)

我已经查看了其中几个图像的HEX,看起来压缩设置是"无".所以我假设他们没有压缩.此外,原始文件的HEX具有"BMP"代码,结果文件具有您期望的"JFIF"代码.

图像是黑白的,没有颜色.

有关为什么会发生这种情况的任何想法?寻找正确方向的指针......

编辑:

  • 我已经尝试使用备用过载保存,允许您指定质量.看不到任何好处.
  • 我还应该指出,我在某种程度上坚持使用JPEG.这是一个遗留系统,系统的其他部分需要JPEG.

图像属性:

  • 位图尺寸:152x48
  • 位图文件大小:1022个字节
  • JPEG:相同的尺寸
  • JPEG大小:2.2 kb
  • 位图信息:索引,1层(2种颜色)
  • 位图分辨率:96.012x 96.012 ppi

.net system.drawing image-manipulation image-processing

3
推荐指数
2
解决办法
3580
查看次数

在图像上绘制对比字符串

所以,我有一个视频源的快照,我进入一个Image,为它抓取一个Graphics对象,然后在图像的右下角绘制一个时间戳.到目前为止没问题.但是,我不能保证文本后面会有什么颜色,所以不管我使用什么画笔,它几乎肯定会与它所绘制的一些图像发生冲突,使文本无法读取.

我想知道是否有人知道一种方式(在.net中的方法,或一个很好的算法),根据它背后的图像确定字符串的最佳颜色.

干杯

c# string system.drawing

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

.NET Point.IsEmpty与IsDefined

在我的UI类中,开发人员可以选择定义位置属性(System.Drawing.Point的类型).默认情况下,此属性初始化为Point.Empty.由类封装的内部代码使用Point属性的.IsEmpty来确定是否已设置位置.如果属性不为空,则将使用x/y值.如果为空,代码将尝试使用行/列algorythm放置它.

我的问题:
我正在使用属性的.IsEmpty来确定它是否已设置.令我惊讶的是,如果开发人员将该属性设置为0,则会显示为Empty.点0,0在图形中有效.我也理解为什么.IsEmpty为0,0值返回true.

1)没有创建我自己的类或从System.Drawing.Point继承,有没有办法知道属性是否已设置?

我能想到的唯一想法是使用值"new Point(-1,-1)"来默认属性并对其进行测试.有没有更好的办法?如果没有,请确认.

我在Visual Studio 2005和Visual Studio 2008中使用C#

谢谢!

c# system.drawing

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

在图像上写入文本(指定宽度)

当前示例

我正在为员工生成 ICard。我必须在 ICard 上写下雇员的地址。

            Image blankICard = Image.FromFile(@"C:\Users\admin\Pictures\filename.jpg");

            Bitmap outputImage = new Bitmap(blankICard.Width, blankICard.Height, System.Drawing.Imaging.PixelFormat.Format32bppArgb);
            System.Drawing.SolidBrush b = new SolidBrush(Color.FromArgb(255, 88, 89, 91));
            using (Graphics graphics = Graphics.FromImage(outputImage))
            {
                graphics.DrawImage(blankICard, new Rectangle(0, 0, blankICard.Width, blankICard.Height),
                new Rectangle(new Point(), blankICard.Size), GraphicsUnit.Pixel);

                Font stringFont = new Font("FreightSans Medium", 20, FontStyle.Regular);

                string address = "Address goes here";

                graphics.DrawString(address, new Font("FreightSans Medium", 20, FontStyle.Regular), b, new Point(621, 234));
                graphics.DrawString("Employee Code:12345678", new Font("FreightSans Medium", 26, FontStyle.Regular), b, new Point(350, 407));
            }
Run Code Online (Sandbox Code Playgroud)

电流输出显示在图像的左侧。这是我的字符串开箱即用会发生什么。

我想把它装在固定尺寸的盒子里。

示例显示在图像的右侧。

.net c# system.drawing drawstring

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

如何通过Powershell创建位图

我想学习使用Powershell创建/编辑图像.请帮助我创建位图图像,用一些颜色填充它,将某些像素的颜色设置为其他颜色并将图像保存到文件中.

编辑:我尝试了下面的代码,但得到了一个黑色的位图

[System.Reflection.Assembly]::LoadWithPartialName("System.Drawing")
$bmp = New-Object System.Drawing.Bitmap(320, 240)

for ($i = 0; $i -lt 100; $i++)
{
   for ($j = 0; $j -lt 100; $j++)
   {
     $bmp.SetPixel($i, $j, 1000)
   }
}

$bmp.Save("f:\Temp\bmp.bmp")
ii f:\Temp\bmp.bmp
Run Code Online (Sandbox Code Playgroud)

.net powershell system.drawing image bitmap

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

如何将图片从图片盒保存为jpg

我已经可以将文件另存为.jpeg,但是图像无法加载,有人建议吗?

    Private Sub Btnconfirm_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Btnconfirm.Click

        MsgBox("A receipt will now be saved to your files", vbOKOnly, "Thank you for your purchase")

        SaveFileDialog1.ShowDialog()
        MsgBox("Thank you for choosing Tiny Theatre, have a nice day.", vbOKOnly, "Thank you")
        Me.Close()
    End Sub

    Private Sub SaveFileDialog1_FileOk(ByVal sender As System.Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles SaveFileDialog1.FileOk
        Dim FileToSaveAs As String = SaveFileDialog1.FileName

        Dim objwriter As New System.IO.StreamWriter(FileToSaveAs)
        objwriter.Write(PictureBox1)
        objwriter.Close()
    End Sub
Run Code Online (Sandbox Code Playgroud)

vb.net system.drawing savefiledialog

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

ImageList:处理原始图像会将其从列表中删除

ImageList应创建插入其中的所有图像的副本.因此,在将原件添加到列表后处置原件应该是安全的.

为什么以下测试用例失败?

Bitmap test = new Bitmap(128, 128);
ImageList il = new ImageList();

il.Images.Add(test);
Assert.AreEqual(1, il.Images.Count); // OK, image has been inserted
test.Dispose(); // now let's dispose the original
try
{
    var retrievalTest = il.Images[0];
}
catch (ArgumentException) // ... but this Exception happens!
{
}

Assert.AreEqual(1, il.Images.Count); // and this will fail
Run Code Online (Sandbox Code Playgroud)

这里似乎发生了这样的事情:当尝试检索图像时,ImageList发现原始文件已被处理,并将其从ImageList中删除.

为什么会发生这种情况,我认为ImageList应该创建一个图像副本?

.net c# system.drawing imagelist winforms

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

C#如何将system.windows.media.brush转换为system.drawing.brush

我正在尝试为TextBox添加水印.TextBox.Background是一个System.Windows.Media.Brush.我需要Graphics.FillRectangle(System.Drawing.Brush ....)

有没有办法将mediea画笔转换为绘图画笔?

c# system.drawing

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

C# - 将PointF转换为Point

我认为这是一个简单的问题,但我无法弄明白.

//verifica qual o ponto mais proximo do centroide_circulo
PointF ponto_mais_proximo = pontos_medios.OrderBy(x => Math.Pow(x.X - centroide_circulo.X, 2) + Math.Pow(x.Y - centroide_circulo.Y, 2)).FirstOrDefault();

LineSegment2D linha_circulo_vertice = new LineSegment2D(centroide_circulo, ponto_mais_proximo);
Run Code Online (Sandbox Code Playgroud)

无法从'System.Drawing.PointF'转换为'System.Drawing.Point'

我的问题是如何转换它?第一行代码中的ponto_mais_proximo需要是PointF.

c# system.drawing point

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