Tag: 图形

关于“添加剂混合”和“色调替换”的问题

由于绘制字体在CPU方面非常昂贵,许多开发人员使用栅格化字体在video游戏上绘制文本; 那也是我做的。 在绘制文本时使用叠加混合可以很好地处理字形边缘,这些与背景颜色很好地融合。 但它带来了另一个问题, 我决定实现一个’color’参数来绘制字体,而不是为每种颜色生成字形位图,否则很快就会出现内存使用问题; 取决于需要多少字形和颜色以及字体大小,因为它支持Unicode,根据语言可能需要数千个字形。 现在当我混合时,在’红色’背景上说一个’绿色’字体,它就变成了’橙色’! 添加剂混合的目的是什么,但试图绕过这一点比预期的要复杂一些。 显然当背景为“黑色”时不会发生,但最终可能不是那种颜色。 如何将“白色”字体重新着色为“任意”颜色,同时仍保留“任何”颜色的添加剂混合? 非常感谢:D

如何生成动态C#图像?

基本上,我想重新编写以前用PHP编写的VisualCube 。 我研究了GDI +,试图找到处理C#,图形等的书籍。 一些相关的东西只针对WinForms或WPF,而我理想的是想要创建一个提供图像的WebAPI或WCF服务。 我可以使用哪些技术? 如果是GDI +,有人可以在WebAPI / WCF中为我提供用法吗? 我将通过MVC4访问WebAPI / WCF。

将图像转换为1bpp时的阈值?

我不知道如何标记这个问题,请尽可能编辑。 作业:创建一个应用程序,可以在批处理运行中自动裁剪图像中的黑色边框。 图像质量从100-300dpi,1bpp-24bpp不等,批次可以从10-10000个图像变化。 计划:将图像转换为1bpp(双色调,黑/白,如果还没有),在“清理”白点/污垢/噪音后找到黑色结束和白色开始的地方,这些是新的坐标图像裁剪,将它们应用于原始图像的克隆。 删除旧图像,保存新图像。 进展:以上所有都已完成,并且有效,但…… 问题:当转换为1bpp时,我无法控制“阈值”值。 我需要这个。 许多黑暗的图像被裁剪得太多了。 尝试:我试过了 Bitmap imgBitonal = imgOriginal.Clone(new Rectangle(0, 0, b.Width, b.Height), PixelFormat.Format1bppIndexed) 还有这个 。 两者都有效,但似乎没有人给我手动设置阈值的可能性。 我需要用户能够设置此值,并在运行批处理之前使用我的“预览”function,以查看设置是否有用。 哭泣:我在这里不知所措。 我现在不做该做什么或怎么做。 请帮助编码员。 指向一个方向,告诉我链接中找到的代码在哪里找到一个阈值(我没有找到一个,或者不知道在哪里看)或者只是给我一些有用的代码。 任何帮助表示赞赏。

用C#填充八边形

我创建了一个绘制八边形的方法,只要尺寸为200或更高,它就能很好地工作 public static void FillOctagon(PaintEventArgs e, Color color, int x, int y, int width, int height) { e.Graphics.SmoothingMode = SmoothingMode.AntiAlias; var points = new [] { new Point(((x + width) / 2) – (width / 4), y), //side 1 new Point(x, ((y + height) / 2) – (height / 4)), //side 2 new Point(x, ((y […]

在PictureBox上绘制折线

我想在PictureBox上绘制折线(由一个或多个线段组成的连续线)。 在此,我们可以通过指定每个线段的端点来创建多条线,并计算每条线的距离,即每条线的距离。

WinForms上的DrawImage()函数无法正常工作

当我尝试使用以下方法将此位图绘制为2像素宽时,我创建了一个1像素宽和256像素高的BitMap: public void DrawImage(Image image,RectangleF rect) 由于每个位图列之间有白色细条纹,因此未正确绘制位图。 请参阅下面的简单代码 private void Form1_Paint(object sender, PaintEventArgs e) { Graphics gr = e.Graphics; Bitmap bitmap = new Bitmap(1, 256); for (int y = 0; y < 256; y++) { bitmap.SetPixel(0, y, Color.Red); } RectangleF rectf = new RectangleF(); for (int x = 0; x < 500; x++) { float […]

维护区域时旋转位图(矩形)

如何在保持原始位图区域的同时将位图旋转给定的度数。 即,我旋转宽度的位图:100,高度:200,我的最终结果将是一个更大的图像,但旋转部分仍将有100 * 200的面积

Windows 10 NotifyIcon Icon看起来总是非常像素化

我在Windows 10中制作NotifyIcon时遇到问题,其图标资源看起来只是模糊不清。 使用SystemIcons类中的两个图标或使用Properties.Resources自己的图标都会发生这种情况。 我尝试使用Icon (Icon original, int width, int height)构造函数创建一个新的图标实例,以及各种其他疯狂的东西,包括这个块: Icon ico = Icon.FromHandle((new Icon(Resources.InfoIcon, 256, 256).ToBitmap()).GetHicon()); 无济于事。 任何意见,将不胜感激!

字体非常难看

我正在使用以下代码绘制一个字符串: public Image DrawString(String lString) { Image lImage = new Bitmap(128, 128); Rectangle rec = new Rectangle(0, 0, lImage.Width, lImage.Height); Graphics g = Graphics.FromImage(lImage); g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.SingleBitPerPixelGridFit; drawFormat = new StringFormat(); drawFormat.Alignment = StringAlignment.Center; drawFormat.LineAlignment = StringAlignment.Center; Font font = new Font(“Arial”, 20, FontStyle.Regular); font = FindBestFitFont(g, lString, font, rec.Size); g.DrawString(lString, font, Brushes.Red, rec, drawFormat); […]

不安全的C#和2D渲染指针,好还是坏?

我正在编写一个包装DirectX 9的C#控件,并提供简化的界面来执行2D像素级绘图。 .NET要求我将此代码包装在不安全的代码块中,并使用allow unsafe code选项进行编译。 我锁定整个表面,然后返回指向锁定的内存区域的指针。 然后,我可以使用“简单”指针算法直接写入像素数据。 我对此进行了性能测试,发现与我所知的其他“安全”方法相比,速度有了很大提高。 这是在C#.NET应用程序中操纵单个像素的最快方法吗? 有更好,更安全的方式吗? 如果有一个同样快速的方法不需要指针操作,那么我会优先使用它。 (我知道这是2008年,我们都应该使用DirectX 3D, OpenGL等,但是这个控件专门用于2D像素渲染,并且不需要3D渲染。)