|
分類:[.NET 全般]
VB6.0のコードが書かれた本を買いまして、それを2010で動かしたいのですがエラーばっかりでさっぱりです。当方プログラミングは初心者で、少しづつでも教えていただきたいのでよろしくお願いいたします。以下コードです。
'-------------------------------------------------------------------- 'BMP画像を読み込み、csv形式で保存 '保存されたcsv形式データの画像を表示 '2000/10/Oct by T.ONO '-------------------------------------------------------------------- Option Explicit On '画素値を求めるAPI関数 Private Declare Function GetPixel Lib "gdi32" ( _ ByVal hdc As Long, _ ByVal x As Long, _ ByVal y As Long _ ) As Long Const PN = 256 Dim rimg(PN, PN) As Integer 'R成分用 Dim gimg(PN, PN) As Integer 'G成分用 Dim Bimg(PN, PN) As Integer 'B成分用 Dim yimg(PN, PN) As Integer '輝度成分用 Private Sub Commandl_Click() 'ピクチャボックス画像から画素値を求め表示 Dim x, y As Long Dim flev As Long Dim rlev, glev, blev As Long For y = 0 To PN - 1 For x = 0 To PN - 1 flev = GetPixel(Picture1.hdc, x, y) 'Picture1の画素値取得 pixval(flev, rlev, glev, blev) 'RGB成分に分解 rimg(x, y) = rlev : gimg(x, y) = glev : bimg(x, y) = blev Picture2.Pset (x, y), RGB(glev, glev, glev) Next Next End Sub Sub pixval(ByVal flev As Long, ByVal rlev, ByVal glev, ByVal blev) '24ビット画像データからr,g,b値の取り出し blev = (flev And &HFF0000) / 65536 '16ビットシフト glev = (flev And &HFF00&) / 256 '8ビットシフト rlev = (flev And &HFF&) End Sub Private Sub Form_Load() 'ピクチャボックスの初期化 Form1.ScaleMode = 3 'フォームのスケールモードをピクセル Picture1.BorderStyle = 0 'Picture1のBorderStyleを無し Picture1.AutoSize = False 'AutoSizeを固定 Picture1.ScaleMode = 3 'Picture1のScaleModeをピクセルに Picture1.Height = PN 'Picture1の高さ設定 Picture1.Width = PN 'Picture1の幅設定
Picture2.BordeStyle = 0 Picture2.AutoSize = False Picture2.SclaMode = 3 Picture2.Height = PN Picture2.Wigth = PN End Sub Private Sub menuFileOpen_Click() '画像ファイル(BMP)選択 CommonDialog1.CancelError = True On Error GoTo ErrHandler CommonDialog1.Filter = "ビットマップファイル(*.bmp)|*.bmp" CommonDialog1.ShowOpen() DoEvents() Picture1.Picture = LoadPicture(CommonDialog1.FileName) ErrHandler: Exit Sub End Sub Private Sub menuRGBDisp_Click() '画素データを読み込み表示 Dim x, y, ylev As Integer OpenAccess GetOpenFileName For Input As #1 For y = 0 To PN - 1 For x = 0 To PN - 1 Input #1,yimg(x, y) 'ファイルから配列に読み込む ylev = yimg(x, y) Picture2.PSet(x, y), RGB(ylev, ylev, ylev) Next Next Close #1 End Sub
Private Sub menuRGBFileSave_Click() '画像をcsv形式のデータで保存 Dim x, y As Integer Open GetSaveFileName For Output As #1 For y = 0 To PN - 1 For x = 0 To PN - 2 Print #1, yimg(x, y); ","; 'csv形式とする Next Print #1, yimg(x, y) '行の最後のデータ改行のためカンマを付けない Next Close #1 End Sub Function GetSaveFileName() As String '画像データ保存ダイアログ On Error Resume Next With CommonDialog1 .Flags = cdloFNPathMustExist Or cdlOFNHideReadOnly Or cdlOFNOverwritePrompt .Filter = "画素データファイル(*.txt)|*.txt" .ShowSave() DoEvents() If Err = 0 Then GetSaveFileName = .FileName End With End Function Function GetOpenFileName() As String '画像データ読み込みダイアログ On Error Resume Next With CommonDialog1 .Flags = cdlOFNPathMustExist Or cdlOFNHideReadOnly Or_ cdlOFNOverwritePrompt() .Filter = "画素データファイル(*.txt)|*.txt" .ShowOpen() DoEvents() If Err = 0 Then GetOpenFileName = .FileName End With End Function
|