多フォーマット対応グラフィックビューワーを作ろう
Ver 1.0今後ほかの命令、オプションについてもサポート予定です。

<グラフィックビューワーを作ろう>

実行にはSusieのプラグインが必要です。ない場合は下からダウンロードしてください。
Susie 32bit plug-in library Ver0.05 ダウンロード(195KB)

宣 言

Private Declare Function GetPicture Lib "DLL名" (ByVal FileSTR As String, ByVal OffSet As Long, ByVal Mode As Integer, MemoryHandle As Long, InfoHandle As Long, ByVal CallBack As Long, ByVal CallBackLong As Long) As Integer

DLLファイル名

対応フォーマット

ifjpeg.spi

JPEG

ifpi.spi

Pi

ifmag.spi

MAG

ifxld4.spi

XLD4(.Q4)

ifpic.spi

PIC

ifpic2.spi

PIC2

ifgif.spi

GIF

iftiff.spi

TIFF


注:一度に複数のプラグインを使用する場合はAliasでほかの名前をつけてください。

なお、グラフィックを表示するためには次の宣言も必要になります。

Private Declare Sub MoveMemory Lib "kernel32" Alias "RtlMoveMemory" (dest As Any, Source As Any, ByVal length As Long)
Private Declare Function LocalFree Lib "kernel32" (ByVal MemHandle As Long) As Long
Private Declare Function LocalLock Lib "kernel32" (ByVal MemHandle As Long) As Long
Private Declare Function SetDIBits Lib "gdi32" (ByVal Pic_hDC As Long, ByVal hBitmap As Long, ByVal nStartScan As Long, ByVal nNumScans As Long, lpBits As Any, lpBi As Any, ByVal wUsage As Long) As Long
Private Declare Function LocalUnlock Lib "kernel32" (ByVal MemHandle As Long) As Long

使 用 手 順

1.GetPictureによる画像の展開
2.ローカルメモリオブジェクトをロック(ビットマップ本体及びBMP情報構造体)
3.メモリ ブロックを移動(ビットマップ本体>新しく宣言したBITMAPINFOHEADER構造体(構造体のバイト数分)
4.指定されたビットマップのピクセルを設定(ビットマップの表示)
5.ローカルメモリオブジェクトのロック解除及び開放

引 数 説 明

FileSTR

String

読みこむファイル名(メモリでもOK)

OffSet

String

読みこむのがファイルの場合、読込み開始オフセット(通常は0を設定)メモリの場合はデータサイズ

Mode

Integer

読みこむのがファイルなら0、メモリなら1。

MemoryHandle

Long

ビットマップデータ本体のメモリハンドルが返される

InfoHandle

BITMAPINFO構造体

BITMAPINFO構造体が納められたメモリハンドルが返される

CallBack

Long

途中経過を表示するコールバック関数へのポインタ(使用しない場合は0を設定)

CallBackLong

Long

コールバック関数に渡すlongデータ

戻り値:エラーコードが返される。0なら正常終了

エ ラ ー コ ー ド


0

正常終了

-1

その機能はインプリメントされていない

1

コールバック関数が非0を返したので展開を中止した

2

未知のフォーマット

3

データが壊れている

4

メモリーが確保出来ない

5

メモリーエラー(Lock出来ない、等)

6

ファイルリードエラー

7

予約

8

内部エラー

サ ン プ ル プ ロ グ ラ ム


Gifファイルを表示するサンプルです。実はVBだけでも読みこめますが・・・・。VBを起動しフォームに1つピクチャーボックスに張りつけ、次のコードを張り付けて下さい。なお実行には「c:\grf.gif」というファイルが必要になります。また、拡張子が違い、Susie Plug-inが対応しているファイル形式ならば、ファイル名及び、DLL宣言部分のDLL名の部分を対応フォーマットのファイル名に変更するだけで、表示することができます。ちなみに、フォームをクリックすると画像を表示します。

Option Explicit
Private Type BITMAPINFOHEADER
biSize As Long
biWidth As Long
biHeight As Long
biPlanes As Integer
biBitCount As Integer
biCompression As Long
biSizeImage As Long
biXPelsPerMeter As Long
biYPelsPerMeter As Long
biClrUsed As Long
biClrImportant As Long
End Type

Private Declare Sub MoveMemory Lib "kernel32" Alias "RtlMoveMemory" (dest As Any, Source As Any, ByVal length As Long)
Private Declare Function LocalFree Lib "kernel32" (ByVal MemHandle As Long) As Long
Private Declare Function LocalLock Lib "kernel32" (ByVal MemHandle As Long) As Long
Private Declare Function SetDIBits Lib "gdi32" (ByVal Pic_hDC As Long, ByVal hBitmap As Long, ByVal nStartScan As Long, ByVal nNumScans As Long, lpBits As Any, lpBi As Any, ByVal wUsage As Long) As Long
Private Declare Function LocalUnlock Lib "kernel32" (ByVal MemHandle As Long) As Long
Private Declare Function GetPicture Lib "Ifgif.spi" (ByVal FileSTR As String, ByVal OffSet As Long, ByVal Mode As Integer, MemoryHandle As Long, InfoHandle As Long, ByVal CallBack As Long, ByVal CallBackLong As Long) As Integer

Private Sub Form_Click()
Dim BitMapMemoryHandle As Long
Dim BitMapInf As Long
Dim LocalMemoryBMP As Long
Dim LocalMemoryInf As Long
Dim BitMapHeader As BITMAPINFOHEADER

GetPicture "c:\Grf.gif", 0, 0, BitMapMemoryHandle, BitMapInf, 0, 0 '画像の展開

LocalMemoryBMP = LocalLock(BitMapMemoryHandle)'メモリのロック
LocalMemoryInf = LocalLock(BitMapInf)

MoveMemory BitMapHeader, ByVal LocalMemoryBMP, Len(BitMapHeader)'メモリ移動
Picture1.Width = BitMapHeader.biWidth'ピクチャーボックスおよびフォームの大きさを整える
Picture1.Height = BitMapHeader.biHeight
Picture1.Top = 0
Picture1.Left = 0
Form1.Height = Screen.TwipsPerPixelY * BitMapHeader.biHeight
Form1.Width = Screen.TwipsPerPixelX * BitMapHeader.biWidth

SetDIBits Picture1.hDC, Picture1.Image, 0, Picture1.Height, ByVal LocalMemoryInf, ByVal LocalMemoryBMP, 0 'ビットマップ表示
Picture1.Refresh'ピクチャーボックス更新

LocalUnlock BitMapMemoryHandle'メモリロック解除
LocalUnlock BitMapInf

LocalFree BitMapMemoryHandle'メモリ開放
LocalFree BitMapInf
End Sub

Private Sub Form_Load()
Picture1.BorderStyle = 0'ピクチャーボックスの設定
Picture1.Height = 0
Picture1.Width = 0
Form1.ScaleMode = 3'フォームの設定
End Sub

ダ ウ ン ロ ー ド

簡単にSusie Plug-inを使用する関数集「Visual Basic Picture Plus」ダウンロード
Visual Basic Picture Plusを使った本格グラフィックビューワー VBSusieダウンロード

トップに戻る
Visual Basicワンポイントテクニック目次に戻る

Gポイントポイ活 Amazon Yahoo 楽天

無料ホームページ 楽天モバイル[UNLIMITが今なら1円] 海外格安航空券 海外旅行保険が無料!