如何从原始区域填充线性梯度刷区域?
我使用线性刷子来填充该区域,我使用启动和终点(颜色)创建了线性的刷子. Rectangle linearGradientregion= new Rectangl(20,-50,30,30); LinearGradientBrush linearGradientBrush = new LinearGradientBrush(new PointF(20, -20), new PointF(50, -50), Color.Green, Color.Red); Rectangle pathRegion= new Rectangl(-50,-25,50,50); GraphicsPath path = new GraphicsPath(); path.AddRectangle(pathRegion); graphics.FillPath(linearGradientBrush, path); ,区域大小大于线性牙刷边界区域. 现在,我想知道如何使用线性涂
12 2024-04-26
编程技术问答社区
创建一个图像查看器窗口控制
我正在学习gdi+,我正在尝试使用滚动条制作一个显示窗口(所以我一次只能看到一部分图像,我可以滚动它).我已经从几本书中读取了GDI+的基础知识,但我在网上或关于做更多高级事情的书中没有找到任何好的教程. 有关指南或示例代码的任何建议? 这是我到目前为止的 protected override void OnPaint(PaintEventArgs e) { base.OnPaint(e); if (Label != null) { using (Bitmap drawnLabel = new Bitmap(Label.LabelHeight, Label.LableLength, System.Drawing.Imaging.PixelFormat.Format1bppIndexed)) using (Graphics drawBuffer = Graphics.FromImage(drawnLabel))
14 2024-04-26
编程技术问答社区
GDI+ 在表格上绘制多个矩形时遇到的问题
i使用gdi+绘制C#Windows表单中的表格.当矩形的数量太大,无法在表单上显示所有矩形时,它不会滚动.并且无法访问那些不适合表格的人. 我需要做什么才能看到我在表格上绘制的所有内容? 谢谢. 解决方案 使用面板或USERCONTROL进行绘画,使其足够大以使您的完整桌子合适,然后让形式自动滚动. 一个组件不在乎您在它上画什么或在哪里. Scrollbars不会仅仅因为您在看不见的地方绘制某些东西而神奇地出现.因此,要么使用组件的围墙足够适合您的绘图(您应该知道它的大小),然后让容器滚动.或直接使用滚动条并相应地翻译图纸.但是,后者的选项更为复杂:) 其他解决方案 创建一个UserControl,您可以在其中绘制桌子.将其高度和宽度设置为全高和宽度(即不限于表格尺寸,而与表尺寸有关). 现在将您的控制放在面板中并激活滚动条.
20 2024-04-26
编程技术问答社区
从头开始写/画我自己的ListBox/ListView控件
我将如何找出如何制作Windows表格Control?我想从头开始创建Control.最好是ListBox甚至更好的是ListView Control,但我不知道从哪里开始. 我过去遇到的一些建议是: 使用Panel Control并动态添加Label以适当的样式向其添加Label,; 扩展或子类ListView/ListBox Control s,并将OwnerDraw设置为true,然后在OnPaint事件中进行自定义绘图. ,但我想要的控制要多.我不仅想要一个ListView Control,我也不想使用第三方控件(无论[Object ListView]有多好, 1 .我想要我自己的 但是,这在Windows表单中可能从哪里开始? 我需要使用GDI/GDI+绘制所有内容吗?我可以从一个空的Panel Control开始,然后使用System.Drawing命名空间手动绘制每个列表项目? 解决方案 我将如何找出如何制作Windows表单控制?
10 2024-04-25
编程技术问答社区
使用C#在桌面上绘图
我正在尝试使用C#在桌面上绘制矩形.找到一些解决方案后,我得到了这些: using System; using System.Drawing; using System.Runtime.InteropServices; using System.Windows.Forms; namespace Test { public partial class Form1 : Form { [DllImport("User32.dll")] public static extern IntPtr GetDC(IntPtr hwnd); [DllImport("User32.dll")] static extern int ReleaseDC(IntPtr hwnd, IntPtr dc); public Form1() { InitializeCompon
12 2024-04-25
编程技术问答社区
擦除至透明化
所以我试图使一个32x32的街区重新回到透明,但是每次我尝试将其设置为透明时,它只会保留已经存在的东西,我想删除图像上的内容以透明,这是我尝试过的代码. public Bitmap erase_tile(Bitmap bitmap, int x, int y) { Graphics device = Graphics.FromImage(bitmap); Brush brush = new SolidBrush(Color.FromArgb(0, Color.White)); device.FillRectangle(brush, new Rectangle(x * 32, y * 32, 32, 32)); return bitmap; } 解决方案 所有透明度将通过Bitmap类上的功能来实现. Graphics类适合绘图,而绘图Color.Transparent本质上是一个no-
16 2024-04-25
编程技术问答社区
C#对setpixel的替代方案
我已经阅读了几篇文章,这些文章是使用setpixel/getpixel的替代方法,但我没有看到它们与我的问题的关系. i具有一个多色图像,该图像(取决于从db获取的动态值)将每个像素颜色组的颜色更改为新颜色. 可以说,我希望所有具有-989556的ARGB值的像素更改为-16,并且ARGB值为-1331的所有像素更改为-5383962. 我目前正在查看位图中的每个像素并检查其值,如果它们匹配,则使用setPixel更改它们. 我确定必须有更好的方法,但是我太昏暗了! 解决方案 看一下成像群. setRemaptable P> 其他解决方案 如果您要更改整个颜色,则可能不想以每个像素为基础更改它们.有一个颜色转换矩阵,可以使您可以在几行代码中更改图像中颜色的所有像素,而无需循环并操纵图像的每个像素,这很慢. 请参阅以下链接: http://msdn.microsoft.com/en-us/library/system.drawing.imaging
10 2024-04-25
编程技术问答社区
从缩放的小尺寸图像中获得相同的矩形位置
我正在尝试处理一个大尺寸的图像.由于处理需要太多时间来完成图像,然后再处理图像.处理后,我可以在小尺寸的图像上绘制矩形.我可以翻译如何翻译该矩形与原始未量图像的坐标IE:在未量化图像上的相同位置绘制矩形. 我正在使用以下代码调整图像大小 public static Size ResizeKeepAspect(Size CurrentDimensions, int maxWidth, int maxHeight) { int newHeight = CurrentDimensions.Height; int newWidth = CurrentDimensions.Width; if (maxWidth > 0 && newWidth > maxWidth) //WidthResize { Decimal divider = Math.Abs((Decimal)newWidth / (Decimal)maxWidth);
10 2024-04-25
编程技术问答社区
基于IIS和服务的网页图像生成-GDI、GDI+或Direct2D?
是2017年5月.我的老板要求我根据用户进入浏览器的文本上的文本上制作一些自定义的Web图像. 服务器环境是Windows 2012运行II,我对C#很熟悉.根据我阅读的内容,我应该能够使用GDI+创建图像,将平滑的文本绘制到其中等. 但是,我的一位同事建议GDI+可能无法在Windows Server上使用,并且GDI+基于较旧的GDI,该GDI是32位,因此很快就会废弃,我应该使用DirectX.我觉得介绍另一层会使重要的问题更复杂. 有很多网页讨论这些主题以及每个主题的表现,但感觉尚无定论,因此我要求SO社区的经验. 所以,问题:gdi可以在Windows Server上工作吗? 编辑:感谢您的回复.我从他们那里看到我在几个点上有点含糊.具体来说,我们将渲染到图像过程的打算是基于队列的过程,其中运行GDI+ Graphics代码的服务.我刚刚读过从2013年开始,这表明不应在服务中运行GDI+,并建议Direct2D是MS Preferred Way-
16 2024-04-25
编程技术问答社区
保存位图到文件中的图像大小字段为零
我发现何时使用bitmap.save方法与格式imageFormat.bmp,该文件中的位图标头信息在bisizeImage字段中为零. 根据规格我可以看到的一切是可以的,但是不幸的是,我被迫与之合作的cr脚的嵌入式设备坚持要正确设置它. 因此,问题是如何在保存位图时始终设置此标头信息字段? 解决方案 您怀疑的问题是,0是RGB位图的图像大小字段的完美允许值. msdn文档 BITMAPINFOHEADER结构>结构>结构确认了这一事实: bisizeImage 图像的大小,字节.对于BI_RGB bitmaps. 可以将其设置为零 如果biCompression是BI_JPEG或BI_PNG, biSizeImage 分别表示JPEG或PNG图像缓冲区的大小. 因此,.NET框架中的实现只是在做事的标准,记录的方式.由于您需要其他内容,因此您必须处理保存以自己文件进程,这将使您可以手动修改BITMAPINFOHEADER结构的biSizeImage
10 2024-04-25
编程技术问答社区
更新图像文件中的EXIF信息
我需要在许多.png文件(成千上万的员工图片)中更新EXIF信息,我想知道我可以在不打开的情况下可以做一些(不太复杂和记录的)方法图像),然后重新保存它(再次压缩)? 解决方案 不幸的是,.NET GDI+图像格式支持非常斑驳. 考虑ImageMagick.有一个.net包装器. http://wwwww.imagemagick.org/script/index.php /li> 也考虑Exiftool: /a>
10 2024-04-25
编程技术问答社区
C# GDI+通用错误/保存多个图像后的外部异常
我在C#中有一个小型控制台应用程序,该应用程序从一个.jpg-format中从文件夹中获取一对图片(包含几百张图像),将它们合并到一张图片中,并将结果存储在另一个文件夹中.源文件夹中的所有图片重复此过程. 在尝试保存结果时,它可以在几个循环迭代中进行一些循环迭代,但随后我得到了一个未经处理的外部异常(内部异常为null).当我创建用于存储的新文件时,并且在崩溃之前为几张图片工作时,我不认为这是由于某些许可问题或文件上的锁定而引起的.我怀疑这可能是一些内存问题,因为当我使用24位(格式24Bpprgb)为.tif时,它在大约13次迭代后崩溃,当我使用48位(format48bpprgb)时,它会在8个迭代后崩溃. > 当前图像崩溃时要保存的图像已经存在于磁盘上,该图像的空为1kb的空tif.该应用程序不是从Visual Studio运行的,而是直接从.EXE运行(因为我在从Visual Studio内部运行的应用程序中创建大型图像时已经阅读了记忆问题) 源图像的尺寸范围
16 2024-04-25
编程技术问答社区
如何检查一个位图图像是否为空?
在form1中我在构造函数中创建一个新的位图: public Form1() { InitializeComponent(); de.pb1 = pictureBox1; de.bmpWithPoints = new Bitmap(pictureBox1.Width, pictureBox1.Height); de.numberOfPoints = 100; de.randomPointsColors = false; de.Init(); } 在课程中,我检查位图是否为null: if (bmpWithPoints == null) 位图不是空的,但也没有用任何东西绘制. 我在课堂上检查是否为空,我想在位图上绘制并设置点. if (bmpWithPoints == null) { for (int x = 0; x
12 2024-04-25
编程技术问答社区
从流中创建图像或位图的无效参数 c# XP only
我相信我正在做的是非常标准的.我通过在资源上调用getManifestResourcestream从嵌入式资源中创建一些图像,从而使其成为.ICO文件的路径: Bitmap bmp = new Bitmap(Assembly.GetEntryAssembly().GetManifestResourceStream("MeterView.Resources.unlocked.ico")); 然后使用位图在我的表单上显示图像.这总是在Windows 7和8上完美效果,但是现在,当我尝试在XP SP3框上运行该应用程序时,我在将流转换为位图的行上获得了"无效参数".我还尝试使用image.fromstream,但结果相同. 资源上的构建操作设置为嵌入资源.有人有任何想法,我如何解决这个问题?我还尝试重置流,这也没有区别. 事先感谢您的任何建议. 图标文件来自此应用程序的原始版本,该版本是在Visual Basic中为XP编写的.我相信它们是在VB中手动产生的.我已经
12 2024-04-25
编程技术问答社区
Mono忽略了Graphics.InterpolationMode?
我有一个程序,可以使用System.Drawing和图形类绘制一些矢量图形.反缩放的作品,善良,但是为了我的需要,我需要过度采样,因此我创建的启动图像更大,然后将最终图像缩减为n.在窗口和.NET上,结果图像看起来很棒!但是,在Mono 2.4.2.3(Ubuntu 9.10库存安装)上,内在的恐怖是可怕的.这是我缩放图像的方式: Bitmap bmp = new Bitmap(Bmp.Width / OverSampling, Bmp.Height / OverSampling); Graphics g = Graphics.FromImage(bmp); g.InterpolationMode = InterpolationMode.HighQualityBicubic; g.DrawImage(Bmp, 0, 0, bmp.Width, bmp.Height); g.Dispose(); 我可以看出,根本没有发生插值.有什么想法吗? 解决方案 好吧,我找到了: h
6 2024-04-25
编程技术问答社区
带有图形的自定义字体样式
我有以下字体列表: 我没有任何问题通过 使用它们 new Font("XXXX Sans", 21, FontStyle.Bold, GraphicsUnit.Pixel) 但是,当我需要使用像Light这样的非标准字体样式时该怎么办?提供的只是枚举,不合适. 解决方案 您不仅可以使用控制面板中显示的字体名称吗?无论如何,大多数不是常规,大胆或斜体的字体实际上都具有亚家族类型的"常规".如果您下载 font properties Extensions 您可以从Microsoft出发.控制面板列出它们的方式以及.NET知道它们的方式有时不同,因此从.NET的角度列出所有字体的好主意: var installed_fonts = new InstalledFontCollection(); var families = installed_fonts.Families; var allFonts = new List
18 2024-04-25
编程技术问答社区
新位图内组合图像的位置和大小
我正在尝试组合两个半透明的PNG图像,并在pictureBox1中显示结果,该结果的SizeMode属性设置为Zoom: pictureBox1.Image = Image.FromFile(imgPath + "/myImg1.png"); 如果我直接显示单个图像,则在中心且尊重现有边框(如下示例图像的右侧所示),但是如果我将这两个图像结合在一起,则大小相同: private void button2_Click(object sender, EventArgs e) { source1 = (Bitmap)Image.FromFile(imgPath + "/myImg1.png"); source2 = (Bitmap)Image.FromFile(imgPath + "/myImg2.png"); var target = new Bitmap(source1.Width, source1.Height, PixelFormat.Form
12 2024-04-25
编程技术问答社区
只在alpha通道上绘制形状
我只想在图像的alpha通道上画一个形状.我可以使用graphics.drawImage(..)绘制图像时使用颜色矩阵,因为它具有传递成像量的参数.是否可以使用Fillellipse方法来执行此操作?还是我必须将其绘制到单独的图像中,然后使用绘图将其应用于我的主要图像? 欢呼, 丹. 解决方案 您可以尝试以下操作: Graphics g; g.CompositionMode = CompositingMode.SourceOver; 然后填充: Color c = Color.FromArgb(100, Color.White);
12 2024-04-25
编程技术问答社区
GDI+的错误:透明度上的抗锯齿白色
以下代码将创建一个透明的位图,然后在抗偏置上绘制一个白色椭圆形. using(var background = new Bitmap(500, 500)) using (var graphics = Graphics.FromImage(background)) { graphics.SmoothingMode = SmoothingMode.AntiAlias; graphics.Clear(Color.Transparent); graphics.DrawEllipse(new Pen(Color.White, 50), 250, 250, 150, 150); background.Save("test.png", ImageFormat.Png); } 我发现的错误是,椭圆边缘周围的抗氧化像素具有出乎意料的颜色.它们的RGB值为(254,254,254),而不是(255,255,255).由于GDI+将透明定义为ArgB(0,25
8 2024-04-24
编程技术问答社区
GDI+绘制矩形的速度很慢
我已经开发了一个Windows表单应用程序,以绘制与用户鼠标位置相关的矩形区域,因为他或她单击,握住并拖动鼠标. 课程非常简单,如下所示: public partial class MainForm : LayeredForm { private bool drawing = false; private Point startLocation = Point.Empty; public MainForm() { InitializeComponent(); Location = Screen.PrimaryScreen.Bounds.Location; Size = Screen.PrimaryScreen.Bounds.Size; Cursor = Cursors.Cross; TopMost = true; ShowInTaskbar = f
16 2024-04-24
编程技术问答社区