1

PDFドキュメントのページを「フラット化」するために使用しているアルゴリズムでメモリの問題が発生しています。

HBITMAP hbmp = CreateDibSection(...);
ThirdPartyBmpManipulation(hbmp, "C:\\file.pdf", 0); //renders page 0 in file.pdf
void * hdib = ConvertBitmap(hbmp); //copy a Dib Section to a Dib
DeleteObject(hbmp); //frees the HBitmap while the Dib is now in memory

問題は、ビットマップが非常に大きく、コピー先のDIBを割り当てている間、HBitmapをメモリに保持できない場合があることです。

ロングショットですが、どういうわけかディスクにDibセクションを割り当てても、HBITMAPを使用できますか?(ConvertBitmap関数に同じハンドルを使用します)

4

1 に答える 1

1

失敗モードとは?あなたは「物理メモリ」と言います.Windowsは仮想メモリを使用し、ディスクにページングします.パフォーマンスヒットを超えて物理メモリが不足することを心配する必要はありません. アドレス空間が不足している場合、ディスクを使用しても役に立たない可能性があります。

ただし、をファイル マッピング ( で作成) にするCreateDIBSectionことができます。関数の内部と関連する HBITMAP 関数が十分にスマートである場合、その機能を活用することで、アドレス空間の枯渇を回避できる可能性があります。それらが「スマート」である場合、必要に応じてファイルの比較的小さな「ウィンドウ」をプロセスのアドレス空間にマップするために使用します。HANDLECreateFileMappingMapViewOfFile

于 2011-01-13T18:25:14.880 に答える