Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 正在尝试将字节[]转换为位图,但给出的错误为“0”;参数无效";在c中#_C#_Bitmap - Fatal编程技术网

C# 正在尝试将字节[]转换为位图,但给出的错误为“0”;参数无效";在c中#

C# 正在尝试将字节[]转换为位图,但给出的错误为“0”;参数无效";在c中#,c#,bitmap,C#,Bitmap,编辑:在您的评论之后: 事实上,我试图捕获整个页面作为一个随机网站的图片转换为PDF格式 那你就走错方向了。你需要启动一个浏览器(例如a)并以某种方式进行屏幕截图。这将是非常重要的。同样重要的是,你要理解为什么你目前的方法不起作用——这表明你对网络的工作方式有一个根本性的误解 原始答案 这是你最根本的问题: public class PrintPage { public void buildPdf(string url) { Bitmap bmp

编辑:在您的评论之后:

事实上,我试图捕获整个页面作为一个随机网站的图片转换为PDF格式

那你就走错方向了。你需要启动一个浏览器(例如a)并以某种方式进行屏幕截图。这将是非常重要的。同样重要的是,你要理解为什么你目前的方法不起作用——这表明你对网络的工作方式有一个根本性的误解

原始答案

这是你最根本的问题:

public class PrintPage
{        
    public void buildPdf(string url)
    {
        Bitmap bmp = PrintHelpPage(url);
        Document dc = new Document();
        PdfWriter pdfWrt = PdfWriter.GetInstance(dc, new FileStream(@"D:/Experiment/Sample.pdf", FileMode.Create));
        dc.Open();
        iTextSharp.text.Image pdfImage = iTextSharp.text.Image.GetInstance(bmp, System.Drawing.Imaging.ImageFormat.Jpeg);
        dc.Add(pdfImage);
        dc.Close();
    }
    private Bitmap PrintHelpPage(string url)
    {
        if (url.ToUpper()=="DEFAULT")
        {
            url = @"https://www.google.com";
        }
        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
        HttpWebResponse response = (HttpWebResponse)request.GetResponse();
        System.Text.Encoding Enc = System.Text.Encoding.GetEncoding(response.CharacterSet);
        StreamReader sr = new StreamReader(response.GetResponseStream(), Enc); 
        string sDoc = sr.ReadToEnd();               
        sr.Close();            
        byte[] by = Encoding.ASCII.GetBytes(sDoc);
        Bitmap bm = ByteToImage(by);            
        return bm;            
    }
    public static Bitmap ByteToImage(byte[] blob)
    {
        using (MemoryStream mStream = new MemoryStream())
        {
            mStream.Write(blob, 0, blob.Length);
            mStream.Seek(0, SeekOrigin.Begin);

            Bitmap bm = new Bitmap(mStream);
            return bm;
        }
    }
}
您正在读取图像,就像它是文本文件一样。不会的。您将丢失这样的数据

此外,您正在关闭传递到
位图
构造函数的内存流-您不应该这样做

您只需将响应流直接复制到
内存流
,并将其用于
位图

System.Text.Encoding Enc = System.Text.Encoding.GetEncoding(response.CharacterSet);
StreamReader sr = new StreamReader(response.GetResponseStream(), Enc); 
string sDoc = sr.ReadToEnd();               
sr.Close();            
byte[] by = Encoding.ASCII.GetBytes(sDoc);

哦,您还应该对响应使用
using
语句,否则将无法处理,这可能会由于连接池而导致未来请求超时。

@Herohanif:那么URL实际上是图像的URL吗?(例如,Google URL当然不是图像…)不,它不是图像URL,实际上我正试图将整个页面捕获为随机网站的图片,以转换为PDF。@Herohanif:这样做你不会有任何运气-你基本上需要启动浏览器,并拍摄屏幕截图。以后,请在你的问题中给出更多的解释——你根本没有提到这一点。问题应该总是有解释性的文本,而不仅仅是代码。请阅读谢谢。所以我会照你说的做。这样做会产生解码问题吗?我主要发现“((System.IO.Stream)(Stream)).ReadTimeout”引发了“System.invalidoOperationException”类型的异常。@Herohanif:是的,您试图将HTML解码为位图。不过,还不清楚
ReadTimeout
是从哪里来的,因为这在您的问题中没有出现过。。。
MemoryStream stream = new MemoryStream();
using (var input = response.GetResponseStream())
{
    input.CopyTo(stream);
}
stream.Position = 0;
Bitmap bitmap = new Bitmap(stream);