Tag: system.drawing

Bitmap.Save保存图标实际上可以保存.png

我需要编写一个程序,根据tileset图像生成108个图标组合(标准窗口.ico文件)。 我使用System.Drawing.Bitmap类来构建每个组合,我将它们保存为: Bitmap IconBitmap = new Bitmap(16, 16); // Some processing, writing different parts of the source tileset // … IconBitmap.Save(Path.Combine(TargetPath, “Icon” + Counter + “.ico”), ImageFormat.Icon); 但我发现保存的文件实际上是PNG。 Windows资源管理器和Visual Studio都无法正确显示它,但GIMP可以,如果我在Hex查看器中打开它,这就是我所看到的: 00000000 89 50 4E 47 0D 0A 1A 0A 00 00 00 0D 49 48 44 52 ‰PNG……..IHDR 00000010 00 00 00 10 00 00 […]

在C#中拖放矩形

我想知道如何在C#中绘制矩形并将其拖放到页面中这里我的代码来绘制它但我不能拖放它。 public partial class Form1 : Form { public bool drag = false; int cur_x, cur_y; Rectangle rec = new Rectangle(10, 10, 100, 100); public Form1() { InitializeComponent(); } protected override void OnPaint(PaintEventArgs r) { base.OnPaint(r); Graphics g = r.Graphics; //g.DrawRectangle(Pens.Black, rec); g.FillRectangle(Brushes.Aquamarine, rec); } private void recmousedown(object sender, MouseEventArgs m) { if (m.Button != […]

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 这里似乎发生了这样的事情:当试图检索图像时,ImageList发现原件已被丢弃,并将其从ImageList中移除。 […]

InterpolationMode HighQualityBicubic在resize的图像边缘引入人工制品

使用一些漂亮的标准C#代码来调整图像大小,并将其放在彩色背景上 Image imgToResize = Image.FromFile(@”Dejeuner.jpg”); Size size = new Size(768, 1024); Bitmap b = new Bitmap(size.Width, size.Height); Graphics g = Graphics.FromImage((Image)b); g.InterpolationMode = InterpolationMode.HighQualityBicubic; g.FillRectangle(Brushes.Green, 0, 0, size.Width, size.Height); g.DrawImage(imgToResize, new Rectangle(0,150,768, 570)); b.Save(“sized_HighQualityBicubic.jpg”); 结果在第0和第1列像素中有一个有趣的人工制品。 第0列似乎与背景颜色混合,第1列变浅。 看到左上角放大了高质量的双三次和双三次。 ..和HighQualityBilinear 此论坛post似乎是有同样问题的人: 具有锐边的DrawImage 听起来像是我的错误? 我可以理解为什么颜色会在resize的图像的顶部混合。 但混合左/右边缘的颜色没有意义。 有谁知道防止这些文物的修复? 更新:这里的评论非常相似: GDI + InterpolationMode

使用添加剂混合绘制图像

问题得到了回答。 有关更多信息,请查看本文末尾的编辑#4。 我们目前正在开发一款相当不错的游戏制作引擎。 我正在制作动画创作者,并想知道是否可以使用添加剂混合绘制图像。 让我解释。 我们使用C#的System.Drawing库,我们使用Windows Forms。 目前,用户可以通过导入带框架的动画图像(包含动画的每一帧的图像)来创建动画,并且用户可以将这些帧拖放到他想要的任何地方。 实际问题是我们无法弄清楚如何使用添加剂混合绘制框架。 这是添加剂混合的一个例子,如果你没有得到它。 我不会怪你,我很难用英文写作。 我们使用以下方法在Panel上绘图或直接在表单上绘图。 例如,这里是为地图编辑器绘制平铺地图的代码。 由于AnimationManager代码很乱,因此这个例子会更清楚。 using (Graphics g = Graphics.FromImage(MapBuffer as Image)) using (Brush brush = new SolidBrush(Color.White)) using (Pen pen = new Pen(Color.FromArgb(255, 0, 0, 0), 1)) { g.FillRectangle(brush, new Rectangle(new Point(0, 0), new Size(CurrentMap.MapSize.Width * TileSize, CurrentMap.MapSize.Height * TileSize))); Tile tile = CurrentMap.Tiles[l, x, […]

无法将图像渲染到HttpContext.Response.OutputStream

基本上我试图在ASP.NET处理程序中呈现一个简单的图像: public void ProcessRequest (HttpContext context) { Bitmap image = new Bitmap(16, 16); Graphics graph = Graphics.FromImage(image); graph.FillEllipse(Brushes.Green, 0, 0, 16, 16); context.Response.ContentType = “image/png”; image.Save(context.Response.OutputStream, ImageFormat.Png); } 但我得到以下exception: System.Runtime.InteropServices.ExternalException: A generic error occurred in GDI+. at System.Drawing.Image.Save(Stream stream, ImageCodecInfo encoder, EncoderParameters encoderParams) 解决方案是使用它而不是将图像写入OutputStream: MemoryStream temp = new MemoryStream(); image.Save(temp, ImageFormat.Png); byte[] buffer = temp.GetBuffer(); […]

在C#中将像素转换为英寸,反之亦然

我希望将像素转换为英寸,反之亦然。 我知道我需要DPI,但我不知道如何获取这些信息(例如我没有Graphics对象,所以这不是一个选项)。 有办法吗?

C# – Base64字节数组到Image FAILS无论我尝试什么

我在从base64编码的字节数组中用C#创建一个Image / Bitmap对象时遇到了麻烦。 这是我正在处理的事情: 我有一个前端,用户可以裁剪图像。 当用户通过input[type=file]选择图像时,我的javascript代码使用HTML5的FileReader将DataUrl (base64字符串)保存到hidden field ,该hidden field与裁剪坐标和尺寸以及其中的所有其他内容一起发布。 form 。 精华: base64数据,如果你想测试自己: http://kristianbak.com/test_image.txt base64字符串发布到操作,并作为参数imageData接收 该操作将字符串转换为base64字节数组,如下所示: byte[] imageBytes = Convert.FromBase64String(imageData.EncodeTo64()); EncodeTo64扩展方法: public static string EncodeTo64(this String toEncode) { var toEncodeAsBytes = Encoding.ASCII.GetBytes(toEncode); var returnValue = Convert.ToBase64String(toEncodeAsBytes); return returnValue; } 将base64字符串转换为字节数组后,我使用MemoryStream将字节读入内存: using (var imageStream = new MemoryStream(imageBytes, false)) { Image image = Image.FromStream(imageStream); //ArgumentException: Parameter […]

使用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, […]

图像在C#中resize – 确定resize尺寸(高度和宽度)的算法

我需要缩小高度或宽度大于预定义像素值的图像。 我写了一些代码来查看原始图像,检查宽度,高度或高度和宽度是否大于最大宽度/最大高度设置。 我现在需要根据后一个值的最大值找出要resize的尺寸。 例如:如果图像为900h x 300w且MAX高度为700h我需要将高度调整为700并将宽度调整为???? < – 这是我需要计算的.. 创建和保存图像文件很简单,超出了本文的范围: // First I get the max height and width allowed: int resizeMaxHeight = int.Parse(Utility.GetConfigValue(“ResizeMaxHeight”)); // in config: 700px int resizeMaxWidth = int.Parse(Utility.GetConfigValue(“ResizeMaxWidth”)); // in config: 500px // Save original: try { filebase.SaveAs(savedFileName); } catch (System.IO.DirectoryNotFoundException ex) { Logger.Instance.LogException(ex, 0, “FileTransfer”); } // Determin original dimensions: […]