注册 登录
编程论坛 VB6论坛

如何压缩图片

chen3bing 发布于 2019-01-14 16:18, 4820 次点击
我想压缩图片,比如我画一条曲线,点击一个按钮,我要让这个图片在水平轴上压缩为
原来的1/2。
应该怎么做?谢谢!
11 回复
#2
wds12019-01-14 16:38
只有本站会员才能查看附件,请 登录

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

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

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



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

#3
chen3bing2019-01-14 16:44
回复 2楼 wds1
谢谢!你搞了两个图片控件,需要对这两个图片操作。
能不能那样,你只用一个图片控件,点击一个按钮,图片
缩放为原来的一半。
#4
wds12019-01-14 19:54
如果只是简单的图片缩放
Private Sub Command1_Click()
 Image1.Stretch = True
 Image1.Width = Image1.Width /2
End Sub
#5
chen3bing2019-01-15 09:01
谢谢!我不知道怎么在image里画图,我找到的例子都是加载图片。
我想请问,怎么在image里画图呢?像Picture那样。麻烦你了

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

#6
chen3bing2019-01-15 09:12
只有本站会员才能查看附件,请 登录

大神,我要的是这个效果。
#7
wds12019-01-15 09:13
image只是显示,不能像picture那样画。

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

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

#8
chen3bing2019-01-15 09:41
wds1大神,你看看我6楼的那个视频,你能实现吗?谢谢了
#9
wds12019-01-15 11:02
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在调用压缩函数
#10
wds12019-01-15 11:22
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在调用压缩函数
#11
jklqwe1112019-01-15 16:17
简单的缩放可以用改变用户坐标系来实现,保存所有画线的坐标点,绘制新线时如果不需要缩放,直接绘制,并保存坐标点,如果要缩放,就先更改坐标系,清空图片,用保存的坐标点重绘图形,最后再续画新点。
#12
William19492019-01-18 14:50
我以前写过一个,大概类似。不同之处在于:我是用鼠标“上”、“下”键控制缩放,而你要求是按时间进行缩放。

只有本站会员才能查看附件,请 登录
1