【问题标题】:C# getting unusable base64 when converting from bitmap从位图转换时 C# 得到不可用的 base64
【发布时间】:2017-05-30 15:50:13
【问题描述】:

我正在尝试捕获屏幕,然后将屏幕截图输出为base64 图像,但似乎无法从我的代码中获取可用的base64 图像。

public static Bitmap bitmap;
    public static string base64;
    public Form1()
    {
        InitializeComponent();
    }
    private void button1_Click(object sender, EventArgs e)
    {
        CaptureScreen();
        Graphics graphics = Graphics.FromImage(bitmap as Image);
        graphics.CopyFromScreen(0, 0, 0, 0, bitmap.Size);
        pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;
        pictureBox1.Image = bitmap;
        richTextBox1.Text = base64;
    }
    public static string CaptureScreen()
    {
        bitmap = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height);
        Bitmap bImage = bitmap;
        System.IO.MemoryStream ms = new System.IO.MemoryStream();
        bImage.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
        byte[] byteImage = ms.ToArray();
        base64 = Convert.ToBase64String(byteImage);
        return base64;
    }

我在测试时得到this 输出,它应该显示或关闭this 图像。

【问题讨论】:

  • 您要复制 0 宽度和 0 高度...?
  • 你的意思是在 graphics.CopyFromScreen(0, 0, 0, 0, bitmap.Size);这只是为了显示结果应该是什么样子。只为发展
  • 但是:你正在分配一个空位图,什么都不写,然后保存它;您应该期望看到一个黑色(或白色)矩形。你看到了什么?对我来说它看起来像一个黑色矩形......
  • 当我将 base64 字符串转换回图像时,我得到一个黑色方块。我得到一个完整的工作截图显示在图片框1
  • 您期待什么,为什么?为什么你会期望看到任何else?你分配了一个空位图,什么也没写……

标签: c# .net string bitmap base64


【解决方案1】:

这里的问题是时机。

您正在创建base-64 您将屏幕复制到图像中;你需要移动这条线:

graphics.CopyFromScreen(0, 0, 0, 0, bitmap.Size);

发生在之前行:

bImage.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);

试着把它改成:

graphics.CopyFromScreen(0, 0, 0, 0, bImage.Size);
bImage.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);

【讨论】:

  • 非常感谢马克! :D
  • 我已经搜索了这个问题,在我的情况下,我已经更新了bImage.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg); 格式,我使用了.Bmp,更改为.Jpeg 并达到了所需的输出
猜你喜欢
  • 2017-02-27
  • 1970-01-01
  • 2013-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多