none
圖片轉成陣列的問題 RRS feed

  • 問題

  • 請問各位大大:小弟在form1用開啟的方式,開啟一張影像,現在想將影像轉成320*240的陣列,將陣列套用到我的副程式,不知未何一直無法成功,特來請益,附上副程式的程式碼,請各位大大幫忙,謝謝!!

     Dim IntImage(319, 239) As Short

    '====開啟(上)====
        Private Sub 開啟OToolStripMenuItem3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles 開啟OToolStripMenuItem3.Click
            OpenFileDialog1.Title = "開啟舊檔"
            'OpenFileDialog1.InitialDirectory = Application.StartupPath
            OpenFileDialog1.Filter = "點陣圖影像 (*.bmp)|*.bmp|所有檔案 (*.*)|*.*"
            If OpenFileDialog1.ShowDialog() = Windows.Forms.DialogResult.OK Then
                Try
                    Dim FileNames() As String
                    Dim filename() As String
                    '把選擇的檔案都加入到ListView上。
                    FileNames = OpenFileDialog1.FileNames
                    filename = OpenFileDialog1.SafeFileNames


                    For k = 0 To FileNames.Length - 1 Step 1
                        lstPic.Add(Image.FromFile(FileNames(k)))
                        lisnum.Add(filename(k))

                        PictureBox1.Image = lstPic(0)
                        PictureBox1.Tag = 0
                        FN_ToolStripLabel1.Text = lisnum(0)
                    Next
                Catch ex As Exception
                End Try
            End If
        End Sub

    '====影像顯示副程式====
        Private Sub ImageShow(ByVal ColorMap As String)
            '影像顯示(VB Only)
            Dim X, Y As Short
            Dim TempSpace As Single
            Dim ImgColor As Short
            '變數初始化
            MaxTemp = 0
            MinTemp = 10000
            IndexImage = New Bitmap(320, 240)   


            '載入溫度陣列h

     

            =====以下程式碼由本論壇爬文得到====

            Dim fs As New FileStream("圖片檔案名稱", FileMode.Open, FileAccess.Read)
            Dim buf(fs.Length - 1) As Byte
            fs.Read(buf, 0, fs.Length)
            fs.Close()
            fs.Dispose()

           =====以上程式碼由本論壇爬文得到====

           IntImage = buf  >>>>>錯誤的地方

    錯誤 1 型別 '1-維陣列屬於 Byte' 的值無法轉換成 '2-維陣列屬於 Short',因為 'Byte' 不是衍生自 'Short'。 C:\Documents and Settings\Administrator\桌面\影像分析-try原始\影像分析\Form1.vb 152 20 影像分析

            '溫度陣列最大最小值
            For X = 1 To 319
                For Y = 1 To 239

                    Select Case IntImage(X, Y)
                        Case Is < MinTemp
                            MinTemp = IntImage(X, Y)
                        Case Is > MaxTemp
                            MaxTemp = IntImage(X, Y)
                            MaxX = X
                            MaxY = Y
                    End Select
                Next
            Next
            TempSpace = MaxTemp - MinTemp
            For X = 0 To 319
                For Y = 0 To 239
                    Select Case ColorMap
                        Case Is = "Ironbow"
                            ImgColor = Int(((IntImage(X, Y) - MinTemp) / TempSpace) * 119)
                            If ImgColor < 0 Then
                                ImgColor = 0
                            End If
                            If ImgColor > 120 Then
                                ImgColor = 119
                            End If
                            IndexImage.SetPixel(X, Y, IronMap(ImgColor))
                        Case Is = "Rainbow"
                            ImgColor = Int(((IntImage(X, Y) - MinTemp) / TempSpace) * 119)
                            If ImgColor < 0 Then
                                ImgColor = 0
                            End If
                            If ImgColor > 120 Then
                                ImgColor = 119
                            End If
                            IndexImage.SetPixel(X, Y, RainMap(ImgColor))
                        Case Is = "Gray"
                            ImgColor = Int(((IntImage(X, Y) - MinTemp) / TempSpace) * 255)
                            If ImgColor < 0 Then
                                ImgColor = 0
                            End If
                            If ImgColor > 255 Then
                                ImgColor = 255
                            End If
                            IndexImage.SetPixel(X, Y, GrayMap(ImgColor))
                    End Select
                Next
            Next
        End Sub

     

    2010年8月13日 上午 11:39

解答

所有回覆

  • 2010年8月13日 上午 11:45
    版主
  • 小歐ou大大,您好:不好意思,剛您給的網站,我把c#的程式碼貼到convert,網頁上顯示

    Conversion results

    -- line 1 col 15: invalid TypeDecl
    請問大大這是發生什麼事了!!
    另外我的 Dim IntImage(319, 239) As Short

    IntImage是我要用來放陣列的地方,請問大大,經由您給的論壇的程式碼執行後的陣列的資料型別可以跟Dim IntImage(319, 239) As Short相容嗎?因為我自己是別的程式碼的結果顯示:

    錯誤 1 型別 '1-維陣列屬於 Byte' 的值無法轉換成 '2-維陣列屬於 Short',因為 'Byte' 不是衍生自 'Short'。

    謝謝小歐ou大大!!

    2010年8月13日 下午 12:18
  • 1.

    搜尋既有討論,關鍵字:LockBits

    http://social.msdn.microsoft.com/Search/zh-TW/?Refinement=112&query=LockBits

    2.

    1 維轉二維 看線上手冊 Buffer.BlockCopy 說明

    3.

    一般先用 DrawImage 畫到全彩的 Bitmap 上,再處理這個全彩的 Bitmap ,這樣可以免考慮色深問題。全彩的 Bitmap 每個 Pixel 為 Integer ,故基本上用不到 Short 。


    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。
    2010年8月13日 下午 01:27