怎么将一张图片压缩到最小,以让它在网上传送!

Lo 2001-05-30 10:49:00
本人有一个程序是在网是截屏的程序,但截下来的图片过大,用JPG还是有300多K,有什么方法,让图片缩到最小!

NMUDP控件,一只发送的流不能超过2K是吗?有什么方法,才能发送大于2K的文件流?(望高手们赐教)
...全文
2033 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
gzc 2001-06-02
  • 打赏
  • 举报
回复
其实没有必要让我大动脑筋啦,有现成的软件处理,以前在<<电脑报>>上看到过,现在忘了,
好象是ACDsee****.*,不是看图软件,而是与之相配的压缩软件,压缩比可以让你不相信自
己的眼睛哦!可到网上搜索.
8080 2001-05-31
  • 打赏
  • 举报
回复
你是不是给别人中木马了?
8080 2001-05-31
  • 打赏
  • 举报
回复
分成n段传过去合到一块
夭夭 2001-05-31
  • 打赏
  • 举报
回复
我自己已经试出了一个简单的办法基本解决了这个问题,不能关机的机率很小了,方法是自己处理WM_QUERYENDSESSION消息:

class TForm1 : public TForm
{
__published:
TNMUDP *NMUDP1;
.
.
.
protected:
BEGIN_MESSAGE_MAP
VCL_MESSAGE_HANDLER(WM_QUERYENDSESSION, TMessage, OnQueryEndSession)
END_MESSAGE_MAP(TForm)

void __fastcall OnQueryEndSession(TMessage& Message)
{
Message.Result=1;
delete NMUDP1;
}
};

即当Windows询问能否关机时,回答true,并删除NMUDP组件,反正要关机了,在这里删除不会有什么问题。我试过,如果不删除,就收不到WM_ENDSESSION消息,估计是Windows询问与NMUDP组件有关的窗口能否关机时得到了否定的回答,不知是不是这样。不知道还有没有更好的更彻底的方法,欢迎大家来讨论!
感谢(迎风飞扬)帮我确认了这个问题是NMUDP组件的BUG.



回复贴子:
 回复人:wxz(行舟) (2001-2-18 12:18:00) 得0分
我也是这么做的,而且更罗嗦如下:

自己动态生成NMUDP1实例;

protected:
BEGIN_MESSAGE_MAP
VCL_MESSAGE_HANDLER(WM_QUERYENDSESSION, TMessage, OnQueryEndSession)
VCL_MESSAGE_HANDLER(WM_ENDSESSION, TMessage, OnQueryEndSession)
END_MESSAGE_MAP(TForm)

void __fastcall OnQueryEndSession(TMessage& Message)
{
Message.Result=1;
delete NMUDP1;
NMUDP1=NULL;
}
};

夭夭 2001-05-31
  • 打赏
  • 举报
回复
我想你还是用UDP,
自己分一下了,这样最快
夭夭 2001-05-31
  • 打赏
  • 举报
回复
个棒图控件Chart1,可将它的棒图直接送入剪切板,现在想把它存成.jpg,
我的步骤是:
Chart1-> 剪切板->TBitmap->TJPEGIImage
能不能省掉TBitmap这个中间对象,它会白白浪费资源的,请众人邦忙;
程序如下:

Chart1->CopyToClipboardBitmap(); // 先送到剪切板

Graphics::TBitmap *b=new Graphics::TBitmap();
b->Assign(Clipboard()); // 再送到中间对象TBitmap

TJPEGImage *j=new TJPEGImage();
j->Assign(b); // 再送到JPEG对象
j->CompressionQuality=80;
j->Compress();

j->SaveToFile("test.jpg");
delete j;
delete b;
BCB中直接有TJpegImage
使用它的方法
virtual void __fastcall LoadFromClipboardFormat(Word AFormat, unsigned AData, HPALETTE APalette);
virtual void __fastcall SaveToFile(const AnsiString Filename);
具体情况看看帮助就搞定了。
用位图有什么不好?用剪贴板来交换同样要占内存嘛!干脆不用剪贴板就相对少占内存了。
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Graphics::TBitmap *bmp1 = new Graphics::TBitmap;
TJPEGImage *jpg1 = new TJPEGImage;
bmp1->Width = Chart1->Width;
bmp1->Height = Chart1->Height;
/*TeeChart的图片质量要求不高,再加上转成JPG又要降低画质,
故可以用16位色甚至 256色来减少内存占用*/
bmp1->PixelFormat = pf16bit; //pf16bit: 16位色;pf8bit: 256色
Chart1->Draw(bmp1->Canvas, Chart1->ClientRect);
jpg1->Assign(bmp1);
jpg1->SaveToFile("C:\\Mydocu~1\\Picture\\Chart1.jpg");
delete bmp1;
delete jpg1;
bmp1 = NULL;
jpg1 = NULL;
}
再改一下你的设置,就OK了
BCB 2001-05-31
  • 打赏
  • 举报
回复
用JPG格式,降低图象质量就可达到30K左右;
多分几次传送不就行了
抬头看路 2001-05-31
  • 打赏
  • 举报
回复
你还是用算术压缩吧,对于普通的屏幕(不包括游戏和VCD,DVD的截图),可以有惊人的压缩率
800*600*64K只要几十K
Lo 2001-05-30
  • 打赏
  • 举报
回复
为什么没人回复我?可怜:(
Lo 2001-05-30
  • 打赏
  • 举报
回复
Ftp有多快?
「已注销」 2001-05-30
  • 打赏
  • 举报
回复
用FTP如何
「已注销」 2001-05-30
  • 打赏
  • 举报
回复
UDP有虫子耶
sjc0722 2001-05-30
  • 打赏
  • 举报
回复
降低图片质量!!

13,871

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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