我用pictureBOX 画了一个图形,。,用打印机打印成A4,有一部分显示不出来,,在网上找了一些资料。可以实现picture的缩放,但是打印出来文件还是显示不全。。就是用的
Printer.PaintPicture Picture1.image, 0, 0我想是不是要缩小图片的大小保存后再,打印保存后图片啊?pis.PaintPicture Picture1, 0, 0, w / 2, h / 2, 0, 0, w, h '缩小为原图的一半为什么在VB中可以缩放大小,保存成图片后还是原始大图片啊??PaintPicture 根本就不能实现我要的效果。、。有人遇到过这个问题吗?解答一下
还有就是那个API,,
StretchBlt(Picture4.hdc, 0, 0, w / 2, h / 2, Picture1.hdc, 0, 0, w, h, SRCCOP)我也用不起。请给一个实例嘛。 ,谢谢

解决方案 »

  1.   

    加粗没有用。主要问题是pictureBOX 打印超出A4的纸张范围
      

  2.   


    我在工程中建立了一个picture1,picture2,image1。
    用image1 缩放picture1中画的图形,
    然后显示在picture2中,,picture2的宽度小于picture1。
    最后打印picture2中的image1 图像,A4上还是有一部没有打印
    ?这个方法不行,我试验过。
    如果你可以,给段代码我试一试。、
      

  3.   

    下下策~~~~
    有一个最笨的方法,就是重画picturebox中的图形,把宽度改小。这样就不会超出A4的打印范围了。。就是太难画了,,,我的图比较多。不好更改、。
      

  4.   


    不明白啊?
    这个picturebox中画的图
    下面的打印出来的图看出来没有?有一部分超出打印范围了,显示不出来
      

  5.   

    1)你不指定比率怎么会缩放
    Printer.PaintPicture Picture1.image, 0, 0, w / 2, h / 2, 0, 0, w, h2)既然缩小图画在 pis 上,就要用 pis.Image 来保存图片,难道你还在用 Picture1.Image 来保存图片?
    pis.PaintPicture Picture1, 0, 0, w / 2, h / 2, 0, 0, w, h
    SavePicture pis.Image, "C:\1.bmp"
      

  6.   

    Image1.Stretch = True
    Image1.Picture = Picture1.Image
    Image1.Left = 0
    Image1.Top = 0
    Image1.Width = Picture1.Width / 2
    Image1.Height = Picture1.Height / 2
    Picture2.AutoRedraw = True
    Picture2.ScaleMode = 3
    printer Picture2.image,0,0  '这个不能打印
    printer image1.Picture,0,0  '这个能打印,但是显示如贴图
      

  7.   

    我使用
    pis.AutoRedraw = True
    pis.AutoSize = True
    pis.PaintPicture Picture1, 0, 0, w / 2, h / 2, 0, 0, w, h
    SavePicture pis.Image, App.Path & "\2.jpg"出图时空白,,但是空白图的宽度缩小了
    还有我使用
    Image1.Stretch = True
    Image1.Picture = Picture1.Image
    Image1.Left = 0
    Image1.Top = 0
    Image1.Width = Picture1.Width / 2
    Image1.Height = Picture1.Height / 2
    SavePicture pis.Image, App.Path & "\2.jpg"
    在程序中显示是缩小了,保存图片后是空白
      

  8.   

    完全可以的,参考下面的例子
    Option ExplicitPrivate Const W = 100
    Private Const H = 50Private Sub Command1_Click()
        Picture1.Cls
        Picture1.Line (0, 0)-(W - 1, H - 1), , B
        Picture1.Circle (20, 20), 10
        SavePicture Picture1.Image, "C:\1.bmp"
        
        Picture2.PaintPicture Picture1.Image, 0, 0, W / 2, H / 2, 0, 0, W, H
        SavePicture Picture2.Image, "C:\2.bmp"
    End SubPrivate Sub Form_Load()
        Dim deltaW As Long
        Dim deltaH As Long
        
        Me.ScaleMode = vbPixels
        
        Picture1.AutoRedraw = True
        Picture1.BackColor = vbWhite
        Picture1.ScaleMode = vbPixels
        
        Picture2.AutoRedraw = True
        Picture2.BackColor = vbWhite
        Picture2.ScaleMode = vbPixels
        
        deltaW = Picture1.Width - Picture1.ScaleWidth
        deltaH = Picture1.Height - Picture1.ScaleHeight
        
        Picture1.Move 0, 0, W + deltaW, H + deltaH
        Picture2.Move 0, H + deltaH + 8, W / 2 + deltaW, H / 2 + deltaH
    End Sub
      

  9.   

    是不是必须要ScaleMode = vbPixels?
    我改成ScaleMode = 1就不行了我是用的ScaleMode = 1画的图,郁闷中...
      

  10.   

    PaintPicture 中的坐标、高宽值使用 ScaleMode 指定的单位,不同的 ScaleMode 要注意换算。
      

  11.   

    感谢Tiger_Zhao,我找到问题关键了,我的代码中少了一个值,缩小显示不出来,更改后就可以,
    但是缩小后的图片效果真的....不堪入目。。没办法。
      

  12.   

    你如果要用 PaintPicture方法,肯定是会失真的
    如果想缩放后几乎不失真,就得重新画图了,定义一个比例如:t,设为0.8
    之后要做的就是在你画图的时候全部*t了