标题:如何压缩图片
只看楼主
chen3bing
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:507
专家分:104
注 册:2008-11-12
结帖率:91.22%
已结贴  问题点数:10 回复次数:11 
如何压缩图片
我想压缩图片,比如我画一条曲线,点击一个按钮,我要让这个图片在水平轴上压缩为
原来的1/2。
应该怎么做?谢谢!
搜索更多相关主题的帖子: 压缩 图片 曲线 按钮 水平 
2019-01-14 16:18
wds1
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:49
帖 子:393
专家分:2025
注 册:2016-3-10
得分:2 
工程1.zip (1.87 KB)

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

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

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



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

2019-01-14 16:38
chen3bing
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:507
专家分:104
注 册:2008-11-12
得分:0 
回复 2楼 wds1
谢谢!你搞了两个图片控件,需要对这两个图片操作。
能不能那样,你只用一个图片控件,点击一个按钮,图片
缩放为原来的一半。
2019-01-14 16:44
wds1
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:49
帖 子:393
专家分:2025
注 册: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: 3Rank: 3
等 级:论坛游侠
帖 子:507
专家分:104
注 册:2008-11-12
得分:0 
谢谢!我不知道怎么在image里画图,我找到的例子都是加载图片。
我想请问,怎么在image里画图呢?像Picture那样。麻烦你了

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

2019-01-15 09:01
chen3bing
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:507
专家分:104
注 册:2008-11-12
得分:0 
zdr.zip (4.4 MB)

大神,我要的是这个效果。
2019-01-15 09:12
wds1
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:49
帖 子:393
专家分:2025
注 册:2016-3-10
得分:2 
image只是显示,不能像picture那样画。

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

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

2019-01-15 09:13
chen3bing
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:507
专家分:104
注 册:2008-11-12
得分:0 
wds1大神,你看看我6楼的那个视频,你能实现吗?谢谢了
2019-01-15 09:41
wds1
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:49
帖 子:393
专家分:2025
注 册: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: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:49
帖 子:393
专家分:2025
注 册: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



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-492681-1-1.html




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

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