Rabu, 22 September 2010

Memanfaatkan File Biner Untuk Menyimpan Gambar

selain file teks, kita juga bisa membuat dan menggunakan file biner. di dalam VB.NET, juga sudah disediakan cara instant jika kita ingin membuat dan membaca ke dan dari file biner secara intantly.

untuk menulis ke dalam file biner, gunakan:

My.Computer.FileSystem.WriteAllBytes(Filename:string, Content:byte(), Append:boolean)

sedangkan jika kita ingin membaca isi dari sebuah file teks, gunakan:

My.Computer.FileSystem.ReadAllBytes(Filename:string):byte()

contoh berikut ini ditulis dengan menggunakan VB 10 (VS 2010):

Form:

ContohFileBiner

Code:

Public Class FrmDemoFileBiner

    Private Sub btnBukaGambar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnBukaGambar.Click
        Using ofd As New OpenFileDialog()
            With ofd
                .Title = "Buka File Gambar"
                .Filter = "JPEG File (*.JPG)|*.jpg"
                .InitialDirectory = My.Computer.FileSystem.SpecialDirectories.MyPictures
                .Multiselect = False
                .CheckPathExists = True
                .CheckFileExists = True
                .FileName = ""
                If .ShowDialog() = Windows.Forms.DialogResult.OK Then
                    If .FileName <> "" Then
                        Me.PicBox.Image = Image.FromFile(.FileName)
                        Me.lblKeterangan.Text = String.Format("NamaFile: {0}", .FileName)
                    End If
                End If
            End With
        End Using
    End Sub

    Private Sub btnBukaBiner_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnBukaBiner.Click
        Using ofd As New OpenFileDialog()
            With ofd
                .Title = "Buka File Biner"
                .Filter = "Binary File (*.Bin)|*.bin"
                .InitialDirectory = My.Computer.FileSystem.SpecialDirectories.MyPictures
                .Multiselect = False
                .CheckPathExists = True
                .CheckFileExists = True
                .FileName = ""
                If .ShowDialog() = Windows.Forms.DialogResult.OK Then
                    If .FileName <> "" Then
                        ' membaca dari file biner dan menampilkan ke PicBox
                        Me.PicBox.Image =
                            DirectCast(
                                New ImageConverter().ConvertFrom(My.Computer.FileSystem.ReadAllBytes(.FileName)),
                                Image)
                        Me.lblKeterangan.Text = String.Format("NamaFile: {0}", .FileName)
                    End If
                End If
            End With
        End Using
    End Sub

    Private Sub btnSimpanAsBiner_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSimpanAsBiner.Click
        Try
            Using sfd As New SaveFileDialog()
                With sfd
                    .Title = "Simpan Gambar As File Biner"
                    .Filter = "Binary File (*.Bin)|*.bin"
                    .InitialDirectory = My.Computer.FileSystem.SpecialDirectories.MyPictures
                    .CheckPathExists = True
                    .OverwritePrompt = True
                    .DefaultExt = ".bin"
                    .FileName = "MyBinaryFile.bin"
                    If .ShowDialog() = Windows.Forms.DialogResult.OK Then
                        If .FileName <> "" Then
                            ' menulis ke file biner
                            My.Computer.FileSystem.WriteAllBytes(
                                .FileName,
                                DirectCast(New ImageConverter().ConvertTo(Me.PicBox.Image, GetType(Byte())), Byte()),
                                False)
                        End If
                    End If
                End With
            End Using
        Catch ex As Exception
            MessageBox.Show(ex.Message, Me.Text, MessageBoxButtons.OK, MessageBoxIcon.Information)
        End Try
    End Sub

    Private Sub btnBersihkanPicBox_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnBersihkanPicBox.Click
        Me.PicBox.Image = Nothing
        Me.lblKeterangan.Text = "NamaFile:"
    End Sub

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Me.lblKeterangan.Text = "NamaFile:"
    End Sub

End Class

beberapa point penting yang harus diperhatikan dari code di atas adalah sebagai berikut:

My.Computer.FileSystem.WriteAllBytes(
       .FileName,
       DirectCast(
            New ImageConverter().ConvertTo(Me.PicBox.Image, GetType(Byte())), Byte()),
            False)


potongan code di atas bertugas untuk menyimpan gambar ke dalam sebuah file biner.

isi content yang akan ditulis ke dalam file biner harus dikonversi terlebih dahulu ke dalam format array of byte (byte()). pada contoh code di atas, digunakan class ImageConverter dan Method ConvertTo untuk melakukan konversi object Image ke dalam byte(). potongan code untuk konversinya bisa dilihat di bawah ini

DirectCast(New ImageConverter().
                            ConvertTo(Me.PicBox.Image, GetType(Byte())), Byte())

 

method DirectCast digunakan untuk mengkonversi hasil dari method ConvertTo ke dalam byte() karena method ConvertTo ini akan menghasilkan tipe data balik dalam bentuk Object.

potongan code berikutnya yang harus diperhatikan adalah:

Me.PicBox.Image =
        DirectCast(New ImageConverter().
               ConvertFrom(My.Computer.FileSystem.ReadAllBytes(.FileName)), 
               Image)


potongan code di atas berfungsi untuk membaca isi dari file biner. karena kembalian dari method ReadAllBytes adalah dalam bentuk byte(), maka kita perlu melakukan konversi kembali dari byte() menjadi sebuah Image. hal ini bisa dilakukan dengan menggunakan class ImageConverter dan method ConvertFrom. karena method ConvertFrom ini akan menghasilkan tipe data balik berupa Object, maka kita harus cast kembali tipe data tersebut menjadi Image dengan menggunakan bantuan method DirectCast.

berikut ini bentuk tampilan program ketika dijalankan:

ContohFileBiner-Running

ok, sekian dari saya, semoga bermanfaat bagi kita semua.

 

Rgds
Adi

1 komentar:

Zirora mengatakan...

Thanks, sangat bermanfaat
Jika file biner yg tersimpan itu, disimpan dalam database access bisa g??