回 帖 发 新 帖 刷新版面

主题:[讨论]请教VB处理图片的两个问题?

一、VB如何给图片加水印
二、VB如何把图片缩到指定尺寸(是真正的缩小,不是显示上的缩小)

好心人指导指导,本人比较菜。

回复列表 (共4个回复)

沙发

第一个问题有点难度,网上的代码要么非常复杂,要么不能使用,我正在做试验,尚未成功。
第二个问题可以调用API函数StretchBlt

板凳

StretchBlt 不会用,没有实例代码和详细的参数解释,汗……

3 楼

声明:
Public Declare Function StretchBlt Lib "gdi32" Alias "StretchBlt" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal nSrcWidth As Long, ByVal nSrcHeight As Long, ByVal dwRop As Long) As Long

说明:
将一幅位图从一个设备场景复制到另一个。源和目标DC相互间必须兼容。这个函数会在设备场景中定义一个目标矩形,并在位图中定义一个源图象。源矩形会根据需要进行伸缩,以便与目标矩形的大小相符

返回值:
Long,非零表示成功,零表示失败。会设置GetLastError

参数表:
  hdc ------------  Long,目标设备场景
  x,y ------------  Long,目标矩形左上角的x,y坐标,以逻辑坐标表示
  nWidth,nHeight -  Long,目标矩形的宽度和高度,以逻辑坐标表示
  hSrcDC ---------  Long,源设备场景。如光栅运算未指定一个源,则这个参数应为零
  xSrc,ySrc ------  Long,用源DC的逻辑坐标表示的源矩形左上角位置
  nSrcWidth,nSrcHeight -  Long,分别指定用逻辑单位(以源DC为基础)传输的一幅图象的宽度和高度。如其中有一个参数的符号(指正负号)与对应的目标参数不符,位图就会在对应的轴上作镜像转换处理
  dwRop ----------  Long,传输过程中进行的光栅运算。

dwRop可用VB的常数代替,常用的有:
vbDstInvert:目标位图取反 
vbSrcCopy:源位图直接覆盖目标位图 
vbSrcAnd:源位图与目标位图进行“与”操作 
bSrcInvert:源位图与目标位图进行“异或”操作 
vbSrcPaint:源位图与目标位图进行“或”操作 
vbNotSrcCopy:源位图取反 
vbSrcErase:目标位图取反,再与源位图进行“与”操作 
vbNotSrcErase:源位图与目标位图进行“或非”操作 
vbMergePaint:源位图取反,再与目标位图进行“或”操作


如果你实在不会使用,也可使用VB的PaintPicture方法,速度稍慢

4 楼


用paintpicture函数,另建一窗体,新建picture图片框,先复制放大图像到里面,设定放大缩小系数,一定要根据原图像比例设计,否则会出现缩小后再放大图像失真。参考下面的一段缩小图像,的代码放大的修改下就可以了:
If AMP > 0.01 Then AMP = AMP - AMP * 0.1 
Form.Picture1.Width = Form1.Picture2.Width * AMP
Form.Picture1.Height = Form1.Picture2.Height * AMP
Form.Picture1.Left = Form.Width / 2 - Form.Picture1.Width / 2
Form.Picture1.Top = Form.Height / 2 - Form.Picture1.Height / 2

Form.Picture1.PaintPicture Form1.Picture2.Picture, 0, 0, AMP * DX, AMP * DY, PX, PY, SX, SY

我来回复

您尚未登录,请登录后再回复。点此登录或注册