2017/10/20(Fri) 11:58:20 編集(投稿者)
2017/10/20(Fri) 11:58:07 編集(投稿者)
2017/10/20(Fri) 11:57:58 編集(投稿者)
■No85434 (魔界の仮面弁士 さん) に返信
> ■No85433 (K-1 さん) に返信
>>Private Sub ddsView(ByRef temp_dds_name As String)
> 何故 ByRef に?
特に理由はありません。VB6のコードをVB2005のコンバータでVB.NETに変換したときの状態のままです。
とりあえずByValには直しました。
>>Private Declare Function LocalFree Lib "kernel32" (ByVal MemHandle As IntPtr) As Integer
> 何故 Integer 型に?
特に理由はありません。VB6のコードをVB2005のコンバータでVB.NETに変換したときの状態のままです。
>>Dim LocalMemoryBMP As Long
> 何故 Long 型に?
特に理由はありません。VB6のコードをVB2005のコンバータでVB.NETに変換したときの状態のままです。
>>ByVal CallBack As IntPtr
> 本来は ProgressCallback への Delegate にするべきではありますが、
> どうせ使わないのなら IntPtr でも良いですね。
特に理由はありません。VB6のコードをVB2005のコンバータでVB.NETに変換したときの状態のままです。
>>Dim gp As Graphics = Picture1.CreateGraphics 'フォームのGraficsを作成
> Dispose が漏れています。Using ブロックで囲みましょう。
>
>>Dim hDC As IntPtr = gp.GetHdc() 'そのデバイスコンテキストを取得
> ReleaseHdc メソッドも呼ばれていないようですが…。
Using gp As Graphics = Picture1.CreateGraphics 'フォームのGraficsを作成
Dim hDC As IntPtr = gp.GetHdc() 'そのデバイスコンテキストを取得
ret = SetDIBits(hDC, CInt(CObj(Picture1.Image)), 0, Picture1.Height, LocalMemoryBMP, LocalMemoryInf, 0) 'ビットマップ表示
gp.ReleaseHdc()
End Using
上記のように修正してみました。
>>Picture1.Refresh() 'ピクチャーボックス更新
> Refresh しているのは何故ですか?
特に意識はありません。元になったVB6のコードで行っていたためです。
> もし、PictureBox に表示することが目的なのであれば、
とりあえずはPictureBoxに表示し、最終的には
Picture1.Image.Save(save_file_name)
でBMP画像を生成したいのです。