Foxtable(狐表)用户栏目专家坐堂 → [求助]关于painter窗口画图问题


  共有6015人关注过本帖树形打印复制链接

主题:[求助]关于painter窗口画图问题

帅哥哟,离线,有人找我吗?
云淡风轻
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:409 积分:3022 威望:0 精华:0 注册:2012/1/19 10:11:00
[求助]关于painter窗口画图问题  发帖心情 Post By:2014/3/24 15:43:00 [显示全部帖子]


图片点击可在新窗口打开查看此主题相关图片如下:qq图片20140324153238.jpg
图片点击可在新窗口打开查看

如图所示,我在画二维码图片的时候,长宽都定义好是10 ,10,应该是个正方形,旁边的白色边缘怎么多出来的,如何去掉呢?

 

测试:窗口是“电子照片加二维码”,发布后,首先在特种载体表的第一条记录里的数字档案字段(图片格式)里添加三张图片,测试图片已经在压缩包里,然后在目录打印菜单下有个添加二维码的按钮,按一下,打印前置,添加。

 


 

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:萧山区特种载体一体化管理系统.rar


 回到顶部
帅哥哟,离线,有人找我吗?
云淡风轻
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:409 积分:3022 威望:0 精华:0 注册:2012/1/19 10:11:00
  发帖心情 Post By:2014/3/25 9:01:00 [显示全部帖子]

        Dim p As WinForm.Painter = e.Form.Controls("Painter1")
        Dim g As Graphics = p.Graphics

        g.DrawImage(getImage(projectpath & "电子照片\" & fn & ".jpg"),0,0,800,600)
        g.DrawImage(bar.GetImage,690,480,100,100)
        g.DrawImage(getImage("archives.ico"),725,515,26,30)
        Dim fnt As New Font("黑体",10,FontStyle.Bold)
        g.DrawString(fn,fnt,Brushes.Black,670,585)
        p.Repaint()
        p.save(projectpath & "电子照片\" & fn & ".jpg")

 

能不能不用画板实现,我发现图片没办法适应画板,画板大小固定的话,图片画上去会失真的。 

 

        Dim g As Graphics = p.Graphics

        g.DrawImage(getImage(projectpath & "电子照片\" & fn & ".jpg"),0,0,800,600)
        g.DrawImage(bar.GetImage,690,480,100,100)
        Dim rm As New prt.RenderImage '定义一个图片对象
        rm.Image = GetImage("archives.ico") '设置图片
        rm.Style.ImageAlign.StretchHorz = True
        g.DrawImage(rm.Image,725,515,26,30)
        Dim fnt As New Font("黑体",10,FontStyle.Bold)
        g.DrawString(fn,fnt,Brushes.Black,670,585)
        p.Repaint()
        p.save(projectpath & "电子照片\" & fn & ".jpg")

 

 

我拉伸了二维码,没有效果。

[此贴子已经被作者于2014-3-25 9:25:23编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
云淡风轻
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:409 积分:3022 威望:0 精华:0 注册:2012/1/19 10:11:00
  发帖心情 Post By:2014/3/25 9:29:00 [显示全部帖子]

设置成图片大小的话,如果图片换一张不一样大小的也有这个问题,批量图片也是,由于原始图片大小都不一样,画板固定大小后,有些图片只能部分显示。
[此贴子已经被作者于2014-3-25 9:29:53编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
云淡风轻
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:409 积分:3022 威望:0 精华:0 注册:2012/1/19 10:11:00
  发帖心情 Post By:2014/3/25 9:31:00 [显示全部帖子]

哦,意思我了解了,是获取图片大小赋值给面板高宽。

 回到顶部
帅哥哟,离线,有人找我吗?
云淡风轻
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:409 积分:3022 威望:0 精华:0 注册:2012/1/19 10:11:00
  发帖心情 Post By:2014/3/25 10:53:00 [显示全部帖子]

版主,我做了一个精简案例,测试图片也在包里,在案卷库的第一行的数字档案列(图片型)加三张图片,会自动保存到项目的电子照片文件夹下,然后可以通过添加二维码窗口对其批量添加二维码。

现在是画板只能动态一次,for循环无法多次调整画板大小,第二是二维码无法拉伸,边缘出现白色。

 

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:案例.rar

[此贴子已经被作者于2014-3-25 10:53:02编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
云淡风轻
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:409 积分:3022 威望:0 精华:0 注册:2012/1/19 10:11:00
  发帖心情 Post By:2014/3/25 12:10:00 [显示全部帖子]

二维码空白是另外一个问题。两个独立的问题。

之所以这样做是因为,每张图片大小不一样,在对每张图片加二维码时,画板的大小就需要根据图片调整,因为每条记录的数字档案列存放多张照片,因此根据条目的文件件数做了循环,比如第一条记录有三张图片,8-001-01.jpg,8-001-02.jpg,8-001-03.jpg,实际也就是循环三次,第一次循环画板按照8-001-01.jpg的大小动态调整,加上二维码,然后循环,画板调整成8-001-02.jpg的大小,最后再循环一次,但实际效果是,第二、三次的循环中画板大小没有调整。

 

所有这样做的目的就是一个,批量多图片加二维码,不损失原图片信息(处理后的图片和原图相比就是多了一个二维码,其他包括长款都保持不变)


 回到顶部
帅哥哟,离线,有人找我吗?
云淡风轻
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:409 积分:3022 威望:0 精华:0 注册:2012/1/19 10:11:00
  发帖心情 Post By:2014/3/25 12:18:00 [显示全部帖子]

130*130后也会有空白的,感觉他的二维码生成就是矩形的,和商品上的二维码是正方形不一样。就算把他设置成100*130这样的矩形,还是有边缘白色,无法自适应。一张照片加上二维码,二维码是这样的样子看着也不对。现在二维码里信息少放点,不影响扫描。

 

For i As Integer = 0 To Cint(r("文件件数"))-1 '用于获取文件夹里的照片,每循环一次,对一张照片打上二维码
        If r("文件件数") = 1 Then
            fn = r("档号")
        Else If r("文件件数") > 1 And r("文件件数") < 10 Then
            fn = r("档号") & "-0" & i+1
        Else
            fn = r("档号") & i+1
        End If

     If fn <> "" And filesys.FileExists(projectpath & "电子照片\" & fn & ".jpg") = True Then
        Dim route As String = projectpath & "电子照片\" & fn & ".jpg" '原始照片存放路径
        Dim zwidth = getImage(route).width '原始照片宽
        Dim zheight = getImage(route).height '原始照片高
        Dim p As WinForm.Painter = e.Form.Controls("Painter1")
        p.Width = zwidth '原始照片宽动态赋给画板宽
        p.Height = zheight '原始照片高动态赋给画板高

        Dim g As Graphics = p.Graphics
        g.Clear(Color.White)
        g.DrawImage(getImage(route),0,0)
        g.DrawImage(bar.GetImage,(zwidth-110),(zheight-120),100,100)
        Dim rm As New prt.RenderImage '定义一个图片对象
        rm.Image = GetImage("archives.ico") '设置图片
        rm.Style.ImageAlign.StretchHorz = True '水平拉伸
        g.DrawImage(rm.Image,(zwidth-75),(zheight-85),30,30)
        Dim fnt As New Font("黑体",10,FontStyle.Bold) '黑体,10号,加粗
        g.DrawString(fn,fnt,Brushes.Black,(zwidth-120),(zheight-20))
        p.Repaint()
        p.save(route)
     End If

       Next

 

我这里根据每条记录的文件件数做循环,按理是每循环一次画板就会自动调整一次然后保存一张图片。但后两次循环没有效果。

我测试过了,用messagebox,显示出来是正确赋值的,但是画板大小没有实际调整,只第一次动态调整成功。

[此贴子已经被作者于2014-3-25 13:24:23编辑过]

 回到顶部