多フォーマット対応グラフィックビューワーを作ろう
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 |
なお、グラフィックを表示するためには次の宣言も必要になります。
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 |
内部エラー |
サ ン プ ル プ ロ グ ラ ム |
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ダウンロード