如何直接将内存中的图片数据压缩成jpg格式?

saillovemeng 2008-05-13 11:39:36
使用Image..Save"a.jpeg",ImageFormat.Jpeg);可以把图片存储为jpeg格式的文件

请问现在我想直接把屏幕抓图的图片在内存中就将其压缩为jpeg格式,要怎样做?

...全文
1076 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
Ki1381 2008-05-13
  • 打赏
  • 举报
回复
貌似有个重载可以存成Stream的,不记得了,得查下
saillovemeng 2008-05-13
  • 打赏
  • 举报
回复
可能表达有问题,其实我重点不在如何获得这些数据,
我可以获得图像的数据流,也可以生成图片
我是想把图像的数据流压缩的小一点,然后直接传给对方机器,而不生成图片。
但是我现在找不到直接把图像的数据流压成jpg的方法,

是不是要直接照jpeg压缩算法,然后直接压缩这些流,c#中有没有直接把图片流压缩城jpeg的方法?
大飞飞虫 2008-05-13
  • 打赏
  • 举报
回复
你可能理解有问题, 屏幕抓图的确是在内存中没错, 但是你无从得知他的地址. 也就无法读取. 除非你是自己设计的截图, 不使用WINDOWS自带的截图功能.

你的思路应该转到如何从剪贴板来获取这些数据, 把它转成流,然后就好保存了.
yagebu1983 2008-05-13
  • 打赏
  • 举报
回复
关注!!
csdnshao 2008-05-13
  • 打赏
  • 举报
回复
这一行有问题:
byte[] bytes = new byte[stream.Length];
===〉 byte[] bytes = new byte[stream.Length-1];

csdnshao 2008-05-13
  • 打赏
  • 举报
回复
可能文件流位置有误,其实不必要那么麻烦。

Bitmap bm = new Bitmap(@"c:\1\aab.jpg");

System.Drawing.Image img = bm ;
img.Save(@"c:\1\" + textBox1.Text + ".jpeg"); '保存为文件
saillovemeng 2008-05-13
  • 打赏
  • 举报
回复
我用这样测试

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();
}

可是生成出来的图片显示不了,是什么原因??
AechoJohn 2008-05-13
  • 打赏
  • 举报
回复
Image.Save (Stream, ImageFormat)
AechoJohn 2008-05-13
  • 打赏
  • 举报
回复
Image.Save (Stream, ImageCodecInfo, EncoderParameters)

111,094

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧