使用Image..Save"a.jpeg",ImageFormat.Jpeg);可以把图片存储为jpeg格式的文件请问现在我想直接把屏幕抓图的图片在内存中就将其压缩为jpeg格式,要怎样做?

解决方案 »

  1.   

    你可能理解有问题, 屏幕抓图的确是在内存中没错, 但是你无从得知他的地址. 也就无法读取. 除非你是自己设计的截图, 不使用WINDOWS自带的截图功能.你的思路应该转到如何从剪贴板来获取这些数据, 把它转成流,然后就好保存了.
      

  2.   

    可能表达有问题,其实我重点不在如何获得这些数据,
    我可以获得图像的数据流,也可以生成图片
    我是想把图像的数据流压缩的小一点,然后直接传给对方机器,而不生成图片。
    但是我现在找不到直接把图像的数据流压成jpg的方法,是不是要直接照jpeg压缩算法,然后直接压缩这些流,c#中有没有直接把图片流压缩城jpeg的方法?
      

  3.   

    貌似有个重载可以存成Stream的,不记得了,得查下
      

  4.   

    Image.Save (Stream, ImageCodecInfo, EncoderParameters) 
      

  5.   

    Image.Save (Stream, ImageFormat) 
      

  6.   

    我用这样测试
     MemoryStream  spic = new MemoryStream();            Bitmap bm = new Bitmap(@"c:\1\aab.jpg");
                bm.Save(spic, ImageFormat.Jpeg);
                StreamToFile(spic, @"c:\1\" + textBox1.Text + ".jpeg");
            }
            public void StreamToFile(Stream stream, string fileName)
            {
                // 把 Stream 转换成 byte[]
                byte[] bytes = new byte[stream.Length];
                stream.Read(bytes, 0, bytes.Length);
                // 设置当前流的位置为流的开始
                stream.Seek(0, SeekOrigin.Begin);            // 把 byte[] 写入文件
                FileStream fs = new FileStream(fileName, FileMode.Create);
                BinaryWriter bw = new BinaryWriter(fs);
                bw.Write(bytes);
                bw.Close();
                fs.Close();
            }
    可是生成出来的图片显示不了,是什么原因??
      

  7.   

    可能文件流位置有误,其实不必要那么麻烦。           Bitmap bm = new Bitmap(@"c:\1\aab.jpg");           System.Drawing.Image img = bm ;
             img.Save(@"c:\1\" + textBox1.Text + ".jpeg"); '保存为文件
      

  8.   

    这一行有问题:
                byte[] bytes = new byte[stream.Length];
    ===〉       byte[] bytes = new byte[stream.Length-1];