rt
我在picturebox上用dc绘制图像,有没有什么办法将其放大或者缩小?用stretchBLt缩小后的图像会变得不清晰最好有代码

解决方案 »

  1.   

    不用stretchblt的话,可以将源图象的每一个象素,对应扩展为放大图象的n*n的子域,每个象素的值均取源图象象素值。
      

  2.   

    在MID窗体上放置一个PICTUREBOX控件,将其ScaleMode属性设为Pixel,再在PICTUREBOX里面放一个IMAGE控件,在Image控件中放张照片,再将Image控件的Visible属性设为False。
    一直到这里都是和前面说的一样的,现在再加一个MDI子窗体,就是添加一个普通窗体,并将他的MDICHILD属性改为TRUE就对了,设置这个子窗体的属性,将它的BORADSTYLE设为NONE(无边框),然后将它的AUTOREDRAW设为TRUE,SCALEMODE设为PIXEL(像素),APEARANCE属性设为FLAT(平板窗体)。对了,原来MDI窗体里面那个PICTUREBOX的VISIBLE属性改为FALSE,因为现在我们只是用它来作为一个容器用,而不是用来显示图片,所以不要让它可见。
    然后在MIDFORM的RESIZE事件中写如下代码:
    Private Sub MDIForm_Resize()
    Dim X as long
    Dim Y as long
    Dim H as long
    Dim W as long
    With Form1      '这里原来是PICTURE1,现在我们用FORM1来显示
       .Move 0, 0, Me.Width - 128, Me.Height -400 '如果有菜单的话后面的数字改为704
       .Cls
       X=(.scalewidth-image1.width)\2   '如果想改为拉伸则:X=0
       Y=(.scaleheight-image1.height)\2 '如果想改为拉伸则:Y=0
       H=image1.height                  '如果想改为拉伸则:H=.scalehhight
       W=image1.width                   '如果想改为拉伸则:W=.scalehwidth
       .PaintPicture Image1.Picture,X,Y,W,H
       .refresh '因为我们将FORM的AUTOREDRAW设为TRUE,所以要REFRESH一下才能显示
    End With
    End Sub
    可以用上面的代码来改变图像随窗体变化而改变大小,,
      

  3.   

    http://www.showyou.net/mycode/CodeView/CodeView_1452.html