Tag: 位图

使用SaveFileDialog后,在Bitmap.Save()的GDI +上发生一般错误

我在using块中使用了以下代码块和更多代码: using (System.Drawing.Bitmap tempImg = (System.Drawing.Bitmap)tempObj.GetData(System.Windows.Forms.DataFormats.Bitmap)) { // … tempImg.Save(“..\\..\\testdata\\tempImg.bmp”, ImageFormat.Bmp); // … } 但我仍然得到错误: GDI +发生了一般错误 只有在我做了一些与使用块内的代码无关的动作之后。 在其他时候,这很好。 tempImg.bmp也是一个临时文件,因此我删除了using块本身中的tempImg.bmp。 由于tempImg在使用中并且它被处理掉了,我认为应该解决锁定问题。 有人可以让我知道这段代码中的错误是什么? 编辑: System.Drawing.Image到System.Drawing.Bitmap作为tempImg的类型。 编辑:我发现只有在创建了SaveFileDialog并且用户点击“保存”后才会出现此错误。

如何在不使用“从屏幕上复制”的情况下,仅将位图捕获为图像框显示的内容?

具体来说:我需要捕获图片框实际显示的特定区域作为位图。 区域的坐标由我已覆盖在图片框顶部的控件的边界指定(但属于图片框)。 当我制作区域的“快照”时,控件被隐藏。 我尝试使用普通的屏幕捕获方法(CopyFromScreen),但你无法真正控制那里的时间。 所以它正在捕捉“插页式”状态,比如我的图片框中的照片之间的过渡。 它经常只捕获纯黑色图像(图片框的背景颜色)。 所以我尝试将显示的图像(picturebox.image属性)转换为位图。 问题是图片框很少显示图像。 它显示了一些图像的部分,根据它的尺寸模式(缩放)进行缩放和剪裁。 所以我不能只拿走我的控制坐标并将它们从整个图像中剪切掉。 所以我试着估计图像的哪个部分正在显示,并根据它来修正我的矩形。 事实certificate,我基本上是在重新创建图片框的“缩放”代码来实现这一点(使用图片框的宽高比,图像的宽高比,猜测图像当前正在发生什么级别的缩放,如果它更大或小于图片框等)。 它不漂亮。 所以:现在我需要一种只捕获当前正在图片框的客户区显示的位图的方法,包括照片和当前正在其周围显示的任何黑色“信箱”。 有人有吗? 请记住,我不能依赖使用CopyFromScreen。 它对我的目的来说不够可靠。 我想我需要一种获取图片框的方法来告诉我它正在显示的位。

截图方法生成黑色图像

在c#中未能使用control.drawtobitmap之后,我的第二个选择是获取桌面的屏幕截图并裁剪出所需的部分。 一旦我切换用户帐户,我的打嗝就出现了,虽然程序没有崩溃,一旦用户切换,程序只生成纯黑图像。 我用这个代码作为参考: WebBrowser.DrawToBitmap()或其他方法? 我认为逻辑上这是有道理的,因为这将有助于Windows节省资源。 在我的情况下,我有哪些选择/解决方案? 编辑1对代码进行了修改以进行测试: int c = 0; while (true) { try { c++; Rectangle formBounds = this.Bounds; Bitmap bmp = new Bitmap(formBounds.Width, formBounds.Height); using (Graphics g = Graphics.FromImage(bmp)) g.CopyFromScreen(formBounds.Location, Point.Empty, formBounds.Size); bmp.Save(“picture” + c.ToString() + “.jpg”); Thread.Sleep(5000); } catch (Exception ex) { MessageBox.Show(ex.ToString()); } } 这在用户帐户上完美运行,但是一旦我切换用户,它就会返回exception:句柄无效。 有任何想法吗? 编辑2: DrawToBitmap中的错误并不是随机的…如果我使用了您提供的代码: Bitmap bmp […]

保存位图时背景变黑 – C#

我目前正在尝试保存位图图像,但背景正在变为黑色。 我可以“另存为”图像完美。 我也可以“保存”图像。 这更难,因为我不得不覆盖现有的图像。 但是,当我“保存”我的图像时,背景变黑了。 我不知道是什么导致了它。 这是我的代码: Bitmap tempImage = new Bitmap(DrawArea); DrawArea.Dispose(); if (extension == “.jpeg”) tempImage.Save(fileName, System.Drawing.Imaging.ImageFormat.Jpeg); else tempImage.Save(fileName, System.Drawing.Imaging.ImageFormat.Bmp); DrawArea = new Bitmap(tempImage); pictureBox1.Image = DrawArea; tempImage.Dispose();

将图像转换为位图会将背景变为黑色

我需要将图像转换为位图。 最初,gif以字节forms读入,然后转换为Image。 但是,当我尝试将图像转换为位图时,我的图片框中显示的图形在以前是白色时具有黑色背景。 这是代码: var image = (System.Drawing.Image)value; // Winforms Image we want to get the WPF Image from… var bitmap = new System.Windows.Media.Imaging.BitmapImage(); bitmap.BeginInit(); MemoryStream memoryStream = new MemoryStream(); // Save to a memory stream… image.Save(memoryStream, ImageFormat.Bmp); // Rewind the stream… memoryStream.Seek(0, System.IO.SeekOrigin.Begin); bitmap.StreamSource = memoryStream; bitmap.EndInit(); return bitmap; 有人可以解释为什么背景会变黑并且我怎么能阻止它这样做。 谢谢

如何将Image对象与C#.NET进行比较?

我们可以用C#比较两个Image对象吗? 例如,检查它们是否相等,或者甚至更好地检查它们的像素有多相似? 如果可能,怎么样?

覆盖现有图像

我有这个代码 private void saveImage() { Bitmap bmp1 = new Bitmap(pictureBox.Image); bmp1.Save(“c:\\t.jpg”, System.Drawing.Imaging.ImageFormat.Jpeg); // Dispose of the image files. bmp1.Dispose(); } 我已经在我的驱动器“c:\”上有一个图像t.jpg 。 我希望每次程序运行时都用新图像替换它。 但是出现了GDI +错误 我该怎么办呢?

如何将曲线文本渲染为位图?

我目前正在动态创建一个位图,并使用位图中的图形对象在其上绘制一个字符串,如下所示: System.Drawing.Graphics graph = System.Drawing.Graphics.FromImage(bmp); graph.DrawString(text, font, brush, new System.Drawing.Point(0, 0)); 这将返回一个矩形位图,其中字符串从左到右直接写入。 我也希望能够画出彩虹形状的弦乐。 我怎样才能做到这一点?

使用C#锐化位图

我想在图像上添加锐化滤镜。 我找到了一个简短教程的网站。 我试着在C#中这样做,所以这是我的代码。 无论如何,我试图找出它为什么不起作用。 我不知道我做错了什么,如果是的话,请告诉我该怎么做才能让它按原样运作。 谢谢 public static Bitmap sharpen(Bitmap image) { Bitmap sharpenImage = new Bitmap(image.Width, image.Height); int filterWidth = 3; int filterHeight = 3; int w = image.Width; int h = image.Height; double[,] filter = new double[filterWidth, filterHeight]; filter[0, 0] = filter[0, 1] = filter[0, 2] = filter[1, 0] = filter[1, 2] = […]

将控制绘制到内存(位图)

是否可以在不绘制屏幕的情况下将wpf控件绘制到内存(Bitmap)? 我找到了一个如何保存到Bitmap的示例,但它仅在窗口中绘制窗口时才有效。 BitmapImage bitmap = new BitmapImage(); RenderTargetBitmap renderTarget = new RenderTargetBitmap((int)canvaspad.Width, (int)canvaspad.Height, 96, 96, System.Windows.Media.PixelFormats.Default); renderTarget.Render(canvaspad);