Foxtable(狐表)用户栏目专家坐堂 → [求助]bitmap 如何释放内存


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

主题:[求助]bitmap 如何释放内存

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


加好友 发短信
等级:超级版主 帖子:13837 积分:69650 威望:0 精华:0 注册:2016/11/1 14:42:00
  发帖心情 Post By:2017/1/19 10:55:00 [显示全部帖子]

代码这样写

 

Public Enum Definition
 One = 1
 Two = 2
 Three = 3
 Four = 4
 Five = 5
 Six = 6
 Seven = 7
 Eight = 8
 Nine = 9
 Ten = 10
End Enum

''' <summary>
''' 将PDF文档转换为图片的方法
''' </summary>
''' <param name="pdfInputPath">PDF文件路径</param>
''' <param name="imageOutputPath">图片输出路径</param>
''' <param name="imageName">生成图片的名字</param>
''' <param name="startPageNum">从PDF文档的第几页开始转换</param>
''' <param name="endPageNum">从PDF文档的第几页开始停止转换</param>
''' <param name="imageFormat">设置所需图片格式</param>
''' <param name="definition">设置图片的清晰度,数字越大越清晰</param>
Public Sub ConvertPDF2Image(pdfInputPath As String, imageOutputPath As String, imageName As String, startPageNum As Integer, endPageNum As Integer, imageFormat As ImageFormat, _
 definition As Definition)
 Dim pdfFile__1 As O2S.Components.PDFRender4NET.PDFFile = O2S.Components.PDFRender4NET.PDFFile.Open(pdfInputPath)

 If Not IO.Directory.Exists(imageOutputPath) Then
  IO.Directory.CreateDirectory(imageOutputPath)
 End If

 ' validate pageNum
 If startPageNum <= 0 Then
  startPageNum = 1
 End If

 If endPageNum > pdfFile__1.PageCount Then
  endPageNum = pdfFile__1.PageCount
 End If

 If startPageNum > endPageNum Then
  Dim tempPageNum As Integer = startPageNum
  startPageNum = endPageNum
  endPageNum = startPageNum
 End If

 ' start to convert each page
 For i As Integer = startPageNum To endPageNum
  Dim pageImage As Bitmap = pdfFile__1.GetPageImage(i - 1, 56 * CInt(definition))
  pageImage.Save(imageOutputPath & imageName & i.ToString() & "." & imageFormat.ToString(), imageFormat)
  pageImage.Dispose()
    pageImage = nothing

 GC.Collect
 Next

 pdfFile__1.Dispose()
  pdfFile__1 = Nothing
 GC.Collect
End Sub

 

 

我这样测试

 

For i As Integer = 1 To 100
ConvertPDF2Image("d:\test.pdf", "d:\test", "test", 1, 5, ImageFormat.Jpeg, Definition.One)
Next

[此贴子已经被作者于2017/1/19 11:31:03编辑过]

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


加好友 发短信
等级:超级版主 帖子:13837 积分:69650 威望:0 精华:0 注册:2016/11/1 14:42:00
  发帖心情 Post By:2017/1/19 11:21:00 [显示全部帖子]

你如何调用?代码和pdf文件发上来。


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


加好友 发短信
等级:超级版主 帖子:13837 积分:69650 威望:0 精华:0 注册:2016/11/1 14:42:00
  发帖心情 Post By:2017/1/19 11:31:00 [显示全部帖子]

一个文件太大,循环里面回收内存。

 

pageImage = nothing

GC.Collect


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


加好友 发短信
等级:超级版主 帖子:13837 积分:69650 威望:0 精华:0 注册:2016/11/1 14:42:00
  发帖心情 Post By:2017/1/19 11:33:00 [显示全部帖子]

大文件的处理,尽量不要一次性生成,你可以每次生成100页。

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


加好友 发短信
等级:超级版主 帖子:13837 积分:69650 威望:0 精华:0 注册:2016/11/1 14:42:00
  发帖心情 Post By:2017/1/19 12:08:00 [显示全部帖子]

执行 ConvertPDF2Image 的时候,GetPageImage得到的图片,只有在PDFFile对象dispose的时候,才会释放。

 

也就是说PDFFile对象,尽量不要超出你的内存限制。比如控制在100页以内基本就没问题。


 回到顶部