我目前正在使用此代码来截屏我创建的面板,但每当我保存它时,质量都很糟糕。保存时有什么方法可以保持良好的质量吗?
我尝试调整面板大小但结果仍然相同。 我尝试使用剪切工具进行正常的屏幕截图,它与我使用的代码也有相同的结果。
有什么建议吗?或者帮忙?
private void SaveControlImage(Control theControl)
{
snapCount++;
int width = panel1.Size.Width;
int height = panel1.Size.Height;
Bitmap bm = new Bitmap(width, height, PixelFormat.Format64bppPArgb);
panel1.DrawToBitmap(bm, new Rectangle(0, 0, width, height));
//bm.Save(@"D:\TestDrawToBitmap.bmp", ImageFormat.Bmp);
bm.Save(deskTopPath + @"/Offer_" + snapCount.ToString() + "_" + DateTime.Now.ToString("yyyyMMdd") + @".jpg", System.Drawing.Imaging.ImageFormat.Jpeg);
}
就像在这里一样,如果你将它与你现在正在阅读的内容(比如这个网站)进行比较,它看起来像素化了。我试图屏蔽表格,但它看起来像上传的图片所以它无用
截图:
答案 0 :(得分:0)
Windows窗体未使用矢量图形来绘制用户界面。因此,您可以获得的一切就是将控件绘制到位图而不是屏幕。这与您的控件是否在屏幕上可见无关,但不会有更多。如果您想从Windows窗体控件获得更高分辨率的图像,唯一的方法是调整控件的大小并希望它支持缩放。
答案 1 :(得分:0)
这是我用来保存屏幕截图的内容:
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
private void SaveControlAsImage(Control control, string path)
{
Bitmap bitmap = new Bitmap(control.Width, control.Height);
control.DrawToBitmap(bitmap, control.Bounds);
using (FileStream fs = new FileStream(path, FileMode.Create, FileAccess.ReadWrite))
{
/* using ImageFormat.Png or ImageFormat.Bmp saves the image with better quality */
bitmap.Save(fs, ImageFormat.Png);
}
}
Control screenshot using Windows Snipping Tool
Control screenshot using SaveControlAsImage (ImageFormat.Png)
Control screenshot using SaveControlAsImage (ImageFormat.Jpeg)
它不是最好的质量(只是有点模糊),但这消除了文本周围的扭曲并保持正确的颜色。
旁注:您未使用传递给方法的参数(theControl
),因此您也可以将其删除(不推荐),或将所有调用更改为panel1
方法theControl
并调用方法
this.SaveControlImage(this.panel1);
此外,当您只访问某个属性(即this.panel1.Size.Width
)时,最好只调用该属性而不是将其分配给变量。如果您正在调用方法并获取值(您将使用多次),则必须将其分配给变量(即int arrayCount = array.Count()
)。
答案 2 :(得分:0)
Bitmap bmp= new Bitmap(controls.Width, controls.Height-50, System.Drawing.Imaging.PixelFormat.Format32bppArgb);
Graphics Grap = Graphics.FromImage(bmp);
Grap.CopyFromScreen(PointToScreen(controls.Location).X, PointToScreen(controls.Location).Y, 0, 0, AnhDoThi.Size, CopyPixelOperation.SourceCopy);
SaveFileDialog save = new SaveFileDialog();
save.Filter = "JPEG|*.jpg";
DialogResult tl = save.ShowDialog();
if (tl == DialogResult.OK)
{
bmp.Save(save.FileName);
MessageBox.Show("Completed !");
}