2012-03-20 17 views
0

IDなしでvbのデータベースmysqlから画像を取得したい。しかし、なぜ私は "タイプ 'System.Byte []'のオブジェクトを 'System.Drawing.Image'と打ち込むことができません。"vbを使用してデータベースmysqlの画像を取得する

これは私のコードです。私は、Visual Basic 2008とデータベースmysqlを使用しています。ピクチャフォーマットBLOB。例:[BLOB - 22.1 KiB]

Imports MySql.Data.MySqlClient 
Imports System.Drawing.Imaging 
Public Class Form_Popup 

    Private Sub Form_Popup_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 
     objconn = New MySqlConnection("server=localhost;database=new;userid=root;password= 'root'") 
     objconn.Open() 
     strsql = "select * from peribadi where Noid [email protected]" 
     command = (New MySql.Data.MySqlClient.MySqlCommand(strsql, objconn)) 
     With command 
      .Parameters.AddWithValue("@field1", FormRegister.TextBox1.Text) 
     End With 

     objdr = command.ExecuteReader 
     If (objdr.Read()) Then 
      Label4.Text = (objdr("Name")) 
      Label5.Text = (objdr("Address")) 
      PictureBox1.Image = (objdr("picture")) 

     End If 

    End Sub 
+0

"何のID" を使用していませんか? 「数字のIDを使用していますか? – Bojangles

+0

はい。 idは数値ではありません – ieyla

答えて

1

エラーが画像を取得中です。 イメージをバイト配列に変換する必要があります。 あなたは...ピクチャボックスに

Public Function ResizeImageWithAspect(ByVal picImage As Image, ByVal newWidth As Integer) As Bitmap 
    Dim original As Image = picImage 
    If Not original Is Nothing Then 
     //Find the aspect ratio between the height and width. 
     Dim aspect As Single = CSng(original.Height)/CSng(original.Width) 

     //Calculate the new height using the aspect ratio 
     // and the desired new width. 
     Dim newHeight As Integer = CInt((newWidth * aspect)) 

     //Create a bitmap of the correct size. 
     Dim temp As New Bitmap(newWidth, newHeight, original.PixelFormat) 

     //Get a Graphics object from the bitmap. 
     Dim newImage As Graphics = Graphics.FromImage(temp) 

     //Draw the image with the new width/height 
     newImage.DrawImage(original, 0, 0, newWidth, newHeight) 

     //Dispose of our objects. 
     Return temp 
     original.Dispose() 
     temp.Dispose() 
     newImage.Dispose() 
    Else 
     Return Nothing 
    End If 

End Function 

Public Function ByteToImage(ByVal blob() As Byte) As Bitmap 
    Dim mStream As New System.IO.MemoryStream 
    Dim pData() As Byte = DirectCast(blob, Byte()) 
    mStream.Write(pData, 0, Convert.ToInt32(pData.Length)) 
    Dim bm As Bitmap = New Bitmap(mStream, False) 
    mStream.Dispose() 
    Return bm 
End Function 

Public Function FileImageToByte(ByVal filePath As String) As Byte() 
    Dim fs As FileStream = New FileStream(filePath, FileMode.Open, FileAccess.Read) 
    Dim br As BinaryReader = New BinaryReader(fs) 
    Dim bm() As Byte = br.ReadBytes(fs.Length) 
    br.Close() 
    fs.Close() 
    Dim photo() As Byte = bm 
    Return photo 
End Function 

For more info refer to this link

+0

ありがとうございます! :) – ieyla

0

それを表示する前に、DBからバイトを処理し、画像に変換するメモリストリームを使用することができます。

使用イメージにバイトを変換するには、このコードを:

Dim bytes() as byte 
bytes = (objdr("picture")) 

Dim memStream as New MemoryStream(bytes) 
PictureBox1.image = Drawing.Image.FromStream(memStream) 
+0

okありがとう、それは素晴らしい作品です。 :) – ieyla

+0

しかし、私はエラーが発生しました** 'paramaterは有効ではありません' ** line at Dimem memStream as New MemoryStream(bytes)。 画像がない場合は、画像ボックス1にエラー画像を配置するコードを記載してください。 – ieyla

+0

あなたは 'Try ... Catch Statement'を使ってエラーをキャッチすることができます – jasperagrante

0

VBを使用して、データベースのMySQLの画像を取得します。それは働いて..

しかし、どのようにwebserviceを使用してデータベースmysqlの画像を取得するには?

Try 
     Dim adapter As New MySqlDataAdapter 
     adapter.SelectCommand = dbcomm 

     Dim Data = New DataTable 

     adapter = New MySqlDataAdapter("SELECT image,img_filename FROM image_test WHERE img_id='" + txt_image_id.Text + "'", dbconn) 

     Dim commandbuild = New MySqlCommandBuilder(adapter) 
     adapter.Fill(Data) 

     Dim lb() As Byte = Data.Rows(0).Item("image") 
     'Dim fl = Data.Rows(0).Item("img_filename") 
     Dim lstr As New System.IO.MemoryStream(lb) 
     'txt_RetrieveFilename.Text = fl 

     PictureBox2.Image = Image.FromStream(lstr) 
     PictureBox2.SizeMode = PictureBoxSizeMode.StretchImage 
     lstr.Close() 
    Catch ex As Exception 
     MsgBox(ex.ToString()) 
    End Try 
+0

hmm ...答えよりも質問のようです。 – kleopatra