100分求个图片按比列缩放图
原来的图片高3500
宽2500
缩放成
高120
宽90
条件:
不能变型
可以裁剪 --------------------编程问答-------------------- 用paintpicture方法 --------------------编程问答-------------------- 按什么剪裁?宽?高?先确定后,再使用PaintPicture实现就行了。 --------------------编程问答-------------------- 要具体代码 --------------------编程问答--------------------
Picture1.Height = Image1.Height / Image1.Width * Picture1.Width--------------------编程问答-------------------- 4楼的方法是可行的,我一般放个隐藏的imgBuffer控件在picturebox里,先把图片加载到imgBuffer控件里,用类似他的方法缩放到Picture1里显示:
Picture1.PaintPicture Image1.Picture, 0, 0, Picture1.Width, Picture1.Height, 0, 0, Image1.Width, Image1.Height
imgBuffer.Visible = False
Picture1.ScaleMode = vbPixels
--------------------编程问答-------------------- 剪裁? 下面代码 从原图的左上角取 120*90像素 显示在窗体上
虽然没变形,但这么大的图取这么一小块,显然是看不出什么什么,除非是做拼图游戏。
Private Sub Command1_Click()
Dim W As Double, H As Double
W = 120: H = 90
With LoadPicture("c:\000.jpg")
.Render Me.hdc, 0, 0, W, H, 0, .Height, Me.ScaleX(W, 3, 8), -Me.ScaleY(H, 3, 8), 0
End With
End Sub
下面这个代码 才是 缩略图,肯定是变形的了,3500:2500 不等于 120:90
Private Sub Command2_Click()
Dim W As Double, H As Double
W = 120: H = 90
With LoadPicture("c:\000.jpg")
.Render Me.hdc, 0, 0, W, H, 0, .Height, .Width, -.Height, 0
End With
End Sub
--------------------编程问答-------------------- 友情Up............
--------------------编程问答-------------------- 下面这个代码 才是 缩略图,肯定是变形的了,3500:2500 不等于 120:90
要想真正不变形缩放,则不能限制 高度
--------------------编程问答-------------------- 一个长宽比例为0.714左右,另一个是0.75,那在缩放时需要指定以哪个边为准进行裁切.
Private Sub Command3_Click()
Dim W As Double, H As Double
W = 120
With LoadPicture("c:\000.jpg")
H = .Height / .Width * W
.Render Me.hdc, 0, 0, W, H, 0, .Height, .Width, -.Height, 0
End With
End Sub
长还是宽.
多出的就切掉. --------------------编程问答--------------------
图像原来的比例是7:5 你要把它变成4:3 还不能变形不能裁剪. 楼主数学没学好? --------------------编程问答-------------------- 大概就是这个意思吧
--------------------编程问答--------------------
Private Sub Command2_Click()
Dim W As Double, H As Double, newH
W = 120: H = 90 '显示区域大小固定
With LoadPicture("c:\000.jpg")
.Render Me.hdc, 0, 0, W, H, 0, .Height, .Width, -(.Width * (H / W)), 0 ' 剪裁高度
.Render Me.hdc, W + 30, 0, W, H, 0, .Height, .Height * (W / H), -(.Height), 0 '剪裁宽度
End With
End Sub
可以裁剪!!!!! --------------------编程问答--------------------
我用你的代码处理90*90的图片时,
图片放大了.变型.
--------------------编程问答--------------------
我用你的代码处理90*90的图片时,
图片放大了.变型.
--------------------编程问答-------------------- 那你是要缩 还是要剪,还是连缩带剪? --------------------编程问答-------------------- 原来的图片
高3500
宽2500
这可是你自己说的。 --------------------编程问答-------------------- 连缩带剪 --------------------编程问答--------------------
11 楼 --------------------编程问答-------------------- 楼主试一下这个代码:
Private Sub Command1_Click()
Dim objPic As IPictureDisp, x!, y!, w!, h!, cw!, ch!
Set objPic = LoadPicture("E:\Temp\23620.jpg")
w = ScaleX(objPic.Width, 8, 1)
h = ScaleY(objPic.Height, 8, 1)
cw = 0.75 * h: ch = w * 4 / 3
If (w > cw) Then
x = (w - cw) / 2: y = 0: ch = h '裁剪图片宽度
Else
y = (h - ch) / 2: x = 0: cw = w '裁剪图片高度
End If
Picture1.PaintPicture objPic, 0, 0, 1350, 1800, x, y, cw, ch
End Sub
--------------------编程问答--------------------
我用你的代码处理90*90的图片时,
图片放大了.变型. --------------------编程问答-------------------- 对于小于目标尺寸的图片,肯定还要有另一个判定,那就是改变(放大,裁切之类)还是不改变? --------------------编程问答-------------------- 你自己清清楚楚说过 都是 3500*2500 ,这会有变成90*90 的。
你要说明白以下几点
1 是否超级菜鸟 不会改代码
2 原图图片大小是否 你所说的都是 3500*2500 还是什么尺寸都有
3 图片格式都有哪些,有些图片格式VB是不支持的
4 显示图片的尺寸是否固定 120*90 ,剪裁标准是按照 宽 还是高
这些都与写的代码有关,自己不说清楚 ,一会说这个变形一会说那个变形。
这些说不清楚,或者连多打几个字都懒,NTND 在浪费大家的时间。
csdn 上一般都只写些例子、能看懂语法的就会自己修改。
还好 你似乎会修改图片路径。
--------------------编程问答-------------------- 楼上有理. --------------------编程问答-------------------- 楼主也可参考一下这个软件的代码:
http://www.anqn.com/vb/151/5420.shtml
VB仿著名看图软件Acdsee源代码 --------------------编程问答-------------------- 这个比例肯定会变形吧?
在我看来切割也是变形
API函数StreachBlt可以放大或缩小图片。
补充:VB , 基础类