↑のページのコードをABに移植すればimgctl.dllなどの外部DLLなしでPNGやJPGを読めるんじゃないか、と思ってコードを作ってみました。
しかし、私VBに一度も触れたことが無いので上手くできていないのか、何も表示されません。
どなたか間違いの指摘をお願いします。
以下に私のコードを載せておきます。ややこしいのでエラーメッセージ取得の部分は省いてありますが
DEBUG_A、DEBUG_Bの箇所で調べるとどちらも
「指定されたファイルが見つかりません」
とでてきます。
ファイルパスの部分は相対パス絶対パスともに試しました。
画像は手元にあったpng、jpg、bmpで試しました。
[ここをクリックすると内容が表示されます]
コード: 全て選択
'-----------------------------------------------------------------------------
' イベント プロシージャ
'-----------------------------------------------------------------------------
' このファイルには、ウィンドウ [MainWnd] に関するイベントをコーディングします。
' ウィンドウ ハンドル: hMainWnd
' TODO: この位置にグローバルな変数、構造体、定数、関数を定義します。
'-----------------------------------------------------------------------------
' ウィンドウメッセージを処理するためのコールバック関数
Function MainWndProc(hWnd As HWND, dwMsg As DWord, wParam As WPARAM, lParam As LPARAM) As DWord
' TODO: この位置にウィンドウメッセージを処理するためのコードを記述します。
' イベントプロシージャの呼び出しを行います。
MainWndProc=EventCall_MainWnd(hWnd,dwMsg,wParam,lParam)
End Function
'-----------------------------------------------------------------------------
' ここから下は、イベントプロシージャを記述するための領域になります。
Sub MainWnd_Destroy()
DeleteDC(hMemDC)
DeleteObject(hMemBmp)
aa_DestroyObjects()
PostQuitMessage(0)
End Sub
'http://www31.ocn.ne.jp/~heropa/vb42.htm
Type GdiplusStartupInput
GdiplusVersion As Long
DebugEventCallback As Long
SuppressBackgroundThread As Long
SuppressExternalCodecs As Long
End Type
Declare Function GdiplusStartup Lib "GDIPlus" (ByRef token As Long, ByRef inputbuf As GdiplusStartupInput, ByRef outputbuf As Long) As Long
Declare Function GdiplusShutdown Lib "GDIPlus" (token As Long) As Long
Declare Function GdipCreateBitmapFromFile Lib "GDIPlus" _
(filename As BytePtr, _
ByRef bitmap As Long) As Long
Declare Function GdipCreateHBITMAPFromBitmap Lib "GDIPlus" _
(bitmap As Long, _
ByRef hbmReturn As Long, _
background As Long) As HBITMAP
Declare Function GdipDisposeImage Lib "GDIPlus" _
(image As Long) As Long
Function LoadPNGPicture(strFileName As String) As HBITMAP
Dim gsi As GdiplusStartupInput,A As String
Dim lngResult As Long
Dim lngGdiPlusTolen As Long
Dim lngBitmap As Long
Dim hBitmap As Long
' 構造体初期化
With gsi
.GdiplusVersion = 1
.DebugEventCallback = 0
.SuppressBackgroundThread = 0
.SuppressExternalCodecs = 0
End With
' GDI+初期化
lngResult = GdiplusStartup(lngGdiPlusTolen, gsi,ByVal 0)
If lngResult = 0 Then
' イメージファイルの読み込み
lngResult = GdipCreateBitmapFromFile(StrPtr(strFileName), lngBitmap)
If lngResult = 0 Then
' GDIビットマップハンドルを作成する
LoadPNGPicture= GdipCreateHBITMAPFromBitmap(lngBitmap, hBitmap, 0)
' 取得したイメージを開放する。
GdipDisposeImage(lngBitmap)
End If
GdiplusShutdown(lngGdiPlusTolen)
End If
'DEBUG_A
End Function
Dim hMemDC As HDC,hMemBmp As HBITMAP
Sub MainWnd_Create(ByRef CreateStruct As CREATESTRUCT)
Dim hDC As HDC,path As String
path="data.png"
hDC=GetDC(hMainWnd)
hMemDC=CreateCompatibleDC(hDC)
hMemBmp=LoadPNGPicture(path)
SelectObject(hMemDC,hMemBmp)
ReleaseDC(hMainWnd,hDC)
'DEBUG_B
End Sub
Sub MainWnd_Paint(hDC As HDC)
BitBlt(hDC,0,0,700,600,hMemDC,0,0,SRCCOPY)
End Sub