| 网站首页 | 业界新闻 | 群组 | 交易 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
共有 579 人关注过本帖
标题:如何压缩图片
只看楼主 加入收藏
chen3bing
Rank: 2
等 级:论坛游民
帖 子:210
专家分:99
注 册:2008-11-12
结帖率:88.52%
  已结贴   问题点数:10  回复次数:11   
如何压缩图片
我想压缩图片,比如我画一条曲线,点击一个按钮,我要让这个图片在水平轴上压缩为
原来的1/2。
应该怎么做?谢谢!
2019-01-14 16:18
wds1
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:36
帖 子:347
专家分:1840
注 册:2016-3-10
  得分:2 

缩小1半和放大1倍。
采用的是图像直接缩放,属于有损缩放。

picture1是你要画的曲线图
picture2是你压缩处理后的临时图,他最终还是粘贴到picture1上的,合成新的picture1

wmf2014在以前给出的程序,就是这么实现的,稍微改动一下参数就可以实现1/2压缩。



[此贴子已经被作者于2019-1-14 16:48编辑过]

附件: 您没有浏览附件的权限,请 登录注册
2019-01-14 16:38
chen3bing
Rank: 2
等 级:论坛游民
帖 子:210
专家分:99
注 册:2008-11-12
  得分:0 
回复 2楼 wds1
谢谢!你搞了两个图片控件,需要对这两个图片操作。
能不能那样,你只用一个图片控件,点击一个按钮,图片
缩放为原来的一半。
2019-01-14 16:44
wds1
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:36
帖 子:347
专家分:1840
注 册:2016-3-10
  得分:2 
如果只是简单的图片缩放
Private Sub Command1_Click()
 Image1.Stretch = True
 Image1.Width = Image1.Width /2
End Sub
2019-01-14 19:54
chen3bing
Rank: 2
等 级:论坛游民
帖 子:210
专家分:99
注 册:2008-11-12
  得分:0 
谢谢!我不知道怎么在image里画图,我找到的例子都是加载图片。
我想请问,怎么在image里画图呢?像Picture那样。麻烦你了

[此贴子已经被作者于2019-1-15 09:07编辑过]

2019-01-15 09:01
chen3bing
Rank: 2
等 级:论坛游民
帖 子:210
专家分:99
注 册:2008-11-12
  得分:0 

大神,我要的是这个效果。
附件: 您没有浏览附件的权限,请 登录注册
2019-01-15 09:12
wds1
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:36
帖 子:347
专家分:1840
注 册:2016-3-10
  得分:2 
image只是显示,不能像picture那样画。

你想实现,需要在picture画,之后赋值到image,或者利用api或者图片复制才能实现【这是最简单的方法】。

另外的方法,是保存画图数据,之后每次重画。

2019-01-15 09:13
chen3bing
Rank: 2
等 级:论坛游民
帖 子:210
专家分:99
注 册:2008-11-12
  得分:0 
wds1大神,你看看我6楼的那个视频,你能实现吗?谢谢了
2019-01-15 09:41
wds1
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:36
帖 子:347
专家分:1840
注 册:2016-3-10
  得分:2 
1、你先画前50秒的picture1
2、你把picture1按照相应的压缩比例赋值到picture2
 【此处做一个函数,每次调用完成比例压缩,picture2不用显示,作为临时数据,本例按照picture1压缩1/6】
 'Picture1 减少1/6压缩到Picture2   
  Picture2.PaintPicture Picture1.Image, 0, 0, Picture1.ScaleWidth*5/6, Picture1.ScaleHeight, 0, 0, Picture1.ScaleWidth, Picture1.ScaleHeight
  '清除Picture2后面1/6图像,防止重复复制
  Picture2.Line (Picture1.ScaleWidth *5/6, 0)-(Picture1.ScaleWidth, Picture1.ScaleHeight), vbWhite, BF
  '将Picture2的图像拷贝到Picture1中,其中前5/6是压缩后数据,后1/6是空白数据
  Picture1.PaintPicture Picture2.Image, 0, 0, Picture1.ScaleWidth, Picture1.ScaleHeight, 0, 0, Picture1.ScaleWidth, Picture1.ScaleHeight
3、你在picture1后面1/6位置划线,画完10s在调用压缩函数
2019-01-15 11:02
wds1
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:36
帖 子:347
专家分:1840
注 册:2016-3-10
  得分:0 
1、你先画前50秒的picture1
2、你把picture1按照相应的压缩比例赋值到picture2
 【此处做一个函数,每次调用完成比例压缩,picture2不用显示,作为临时数据,本例按照picture1压缩1/6】
 'Picture1 减少1/6压缩到Picture2   
  Picture2.PaintPicture Picture1.Image, 0, 0, Picture1.ScaleWidth*5/6, Picture1.ScaleHeight, 0, 0, Picture1.ScaleWidth, Picture1.ScaleHeight
  '清除Picture2后面1/6图像,防止重复复制
  Picture2.Line (Picture1.ScaleWidth *5/6, 0)-(Picture1.ScaleWidth, Picture1.ScaleHeight), vbWhite, BF
  '将Picture2的图像拷贝到Picture1中,其中前5/6是压缩后数据,后1/6是空白数据
  Picture1.PaintPicture Picture2.Image, 0, 0, Picture1.ScaleWidth, Picture1.ScaleHeight, 0, 0, Picture1.ScaleWidth, Picture1.ScaleHeight
3、你在picture1后面1/6位置划线,画完10s在调用压缩函数
2019-01-15 11:22







关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.074072 second(s), 8 queries.
Copyright©2004-2019, BCCN.NET, All Rights Reserved