C# 转换屏幕截图数据

本文关键字:数据 屏幕截图 转换 | 更新日期: 2023-09-27 18:33:13

我需要截取屏幕截图,如果很容易不保存它。我会将图像数据直接发送到PHP脚本。因为我目前没有这个PHP脚本,所以我搜索最简单的格式方法,我应该转换屏幕截图数据。出于调试原因,直到我有了我的PHP脚本,我想使用C#在我的客户端转换这些数据的图片。

目前用于截屏并转换的代码(我不确定是否可以将日志文件中的输出转换回图片):

     internal static byte[] ImageToByteArray(Image img)
    {
        byte[] byteArray = new byte[0];
        MemoryStream stream = new MemoryStream();
        img.Save(stream, System.Drawing.Imaging.ImageFormat.Png);
        stream.Close();
        byteArray = stream.ToArray();
        return byteArray;
    }
   public static string TakeScreenshot()
       {
           String filepath = @"C:'log2.txt";
           Bitmap bitmap = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height, PixelFormat.Format32bppArgb);
           Graphics graphics = Graphics.FromImage(bitmap);
           graphics.CopyFromScreen(Screen.PrimaryScreen.Bounds.X, Screen.PrimaryScreen.Bounds.Y, 0, 0, Screen.PrimaryScreen.Bounds.Size, CopyPixelOperation.SourceCopy);
           graphics.Dispose();
           bitmap.Save("C:''temp.png");

           Image img = (Image)bitmap;
           string str = System.Text.Encoding.Default.GetString(ImageToByteArray(img));
           System.IO.File.AppendAllText(filepath, str);
           //just for debugging
           return "OH";
       }

目前的主要问题是,有没有办法从我转换后的代码(log2.txt)中获取图片。

C# 转换屏幕截图数据

这行代码:

string str = System.Text.Encoding.Default.GetString(ImageToByteArray(img));

几乎肯定不会做你想让它做的事情。它将尝试将您的字节数组解释为计算机上默认字符编码的字符串。如果默认值为 UTF-8 或任何多字节字符集,则很可能会失败。即使默认编码是单字节字符集,它也可能会创建一个无法可靠地转回原始字节数组的字符串。

如果确实想将字节数组存储为文本,可以调用 Convert.ToBase64String:

string str = Convert.ToBase64String(ImageToByteArray(img));

如果将该字符串从文件中读回 str ,则可以使用以下方法重建字节数组:

byte[] imageBytes = Convert.FromBase64String(str);

在您的特定情况下的另一个优点是有用于处理 base 64 字符串的 PHP 函数。