Cara mengambil Bitmap dari akses dan menampilkan halaman Web

Ringkasan

Artikel ini menunjukkan contoh cara mengekstrak foto bitmap dalam database Microsoft Access 97 Nwind.mdb, dan melihat mereka dari browser Web menggunakan Active Server Pages (ASP). Untuk melakukan tugas ini, DLL ActiveX harus dibuat bahwa strip akses dan OLE header dari kolom. Artikel ini menunjukkan cara membuat DLL ActiveX ini, dan untuk menerapkannya.

Informasi lebih lanjut

Peringatan: penggunaan oleh Anda kode yang tercantum dalam artikel ini adalah risiko Anda sendiri. Microsoft menyediakan kode ini "apa adanya" tanpa jaminan dalam bentuk apa pun, baik tersurat maupun tersirat, termasuk namun tidak terbatas pada jaminan tersirat dan dapat diperjualbelikan atau kesesuaian untuk tujuan tertentu.


Artikel ini menunjukkan cara menggunakan Visual Basic untuk mengambil bitmap yang tersimpan dalam bidang Objek OLE. Karena definisi penyimpanan Objek OLE tidak didokumentasikan, kode berikut mencari objek OLE header karakter konsisten dengan mulai grafik. Metode ini mungkin tidak bekerja di semua keadaan.


Perhatikan bahwa Internet Explorer 3.0 tidak dapat menampilkan bitmap warna yang benar. Untuk alasan ini, bitmap yang tersimpan dalam Access database harus tak lebih dari 256 warna.

Contoh langkah demi langkah untuk mengekstrak foto

  1. Membuat proyek baru dalam Visual Basic dan membuat proyek DLL ActiveX.

  2. Menambahkan referensi ke objek Data ActiveX (ADO) dengan mengklik menu proyek dan memilih referensi. Pilih "Microsoft OLE DB Perpustakaan objek Data ActiveX 1.0" dan klik OK.

  3. Menambahkan modul baru ke proyek dengan memilih menu proyek dan mengklik Tambah modul. Pilih modul dan klik buka.

  4. Tempatkan kode berikut di bagian (umum) (Deklarasi) MODULE1. BAS:

          ' Enter the following Declare statement as one single line:
    Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory"
    (lpvDest As Any, lpvSource As Any, ByVal cbCopy As Long)

    Type PT
    Width As Integer
    Height As Integer
    End Type

    Type OBJECTHEADER
    Signature As Integer
    HeaderSize As Integer
    ObjectType As Long
    NameLen As Integer
    ClassLen As Integer
    NameOffset As Integer
    ClassOFfset As Integer
    ObjectSize As PT
    OleInfo As String * 256
    End Type
  5. Tempatkan kode berikut di bagian (umum) (Deklarasi) kelas 1. CLS:

            Function DisplayBitmap(ByVal OleField As Variant)
    Dim Arr() As Byte
    Dim ObjHeader As OBJECTHEADER
    Dim Buffer As String
    Dim ObjectOffset As Long
    Dim BitmapOffset As Long
    Dim BitmapHeaderOffset As Integer
    Dim ArrBmp() As Byte
    Dim i As Long

    'Resize the array, then fill it with
    'the entire contents of the field
    ReDim Arr(OleField.ActualSize)
    Arr() = OleField.GetChunk(OleField.ActualSize)

    'Copy the first 19 bytes into a variable
    'of the OBJECTHEADER user defined type.
    CopyMemory ObjHeader, Arr(0), 19

    'Determine where the Access Header ends.
    ObjectOffset = ObjHeader.HeaderSize + 1

    'Grab enough bytes after the OLE header to get the bitmap header.
    Buffer = ""
    For i = ObjectOffset To ObjectOffset + 512
    Buffer = Buffer & Chr(Arr(i))
    Next i

    'Make sure the class of the object is a Paint Brush object
    If Mid(Buffer, 12, 6) = "PBrush" Then
    BitmapHeaderOffset = InStr(Buffer, "BM")
    If BitmapHeaderOffset > 0 Then

    'Calculate the beginning of the bitmap
    BitmapOffset = ObjectOffset + BitmapHeaderOffset - 1

    'Move the bitmap into its own array
    ReDim ArrBmp(UBound(Arr) - BitmapOffset)
    CopyMemory ArrBmp(0), Arr(BitmapOffset), UBound(Arr) -
    BitmapOffset + 1

    'Return the bitmap
    DisplayBitmap = ArrBmp
    End If
    End If
    End Function
  6. Ganti nama proyek dengan memilih Project menu, dan mengklik "Properti Project1" dan ketik nama baru di kolom "Nama proyek". Contoh ini mengasumsikan bahwa Anda bernama proyek "MyProject" dan akan merujuk ke nama tersebut dalam langkah-langkah berikutnya.

  7. Pilih kotak centang "Eksekusi tanpa pengawasan". Klik Oke.

  8. Ganti nama kelas dalam jendela properti. Contoh ini mengasumsikan bahwa Anda diberi nama kelas "MyClass" dan merujuk ke nama tersebut dalam langkah-langkah berikutnya.

  9. Kompilasi DLL dengan mengklik menu berkas dan memilih "Membuat MyProject.dll."

  10. Membuat halaman ASP yang bernama "bitmap.asp" yang berisi kode berikut:

          <%@ LANGUAGE="VBSCRIPT" %>
    <%
    ' You need to set up a System DSN named 'NWind' that points to
    ' the Northwind.mdb database
    Set DataConn = Server.CreateObject("ADODB.Connection")
    DataConn.Open "DSN=NWind", "admin", ""
    Set cmdTemp = Server.CreateObject("ADODB.Command")
    Set RS = Server.CreateObject("ADODB.Recordset")
    cmdTemp.CommandText = "SELECT Photo FROM Employees
    WHERE EmployeeID = 1"
    cmdTemp.CommandType = 1
    Set cmdTemp.ActiveConnection = DataConn
    RS.Open cmdTemp, , 0, 1
    Response.ContentType = "image/bmp"
    Set Bitmap = Server.CreateObject("MyProject.MyClass")
    Response.BinaryWrite Bitmap.DisplayBitmap(RS("Photo"))
    RS.Close
    %>
  11. Membuat halaman HTML yang bernama "BitmapTest.htm" yang berisi kode berikut:

          <HTML>
    <HEAD>
    <TITLE>Bitmap Test</TITLE>
    </HEAD>
    <BODY>
    <HR>
    <img src="Bitmap.asp">
    <HR>
    </BODY>
    </HTML>

Referensi

Untuk informasi lebih lanjut, baca artikel berikut di Pangkalan Pengetahuan Microsoft:

173308 bagaimana cara menampilkan gambar yang disimpan di kolom BLOB

Untuk artices basis pengetahuan terbaru dan informasi dukungan lainnya di Visual InterDev dan Active Server Pages, lihat halaman berikut di situs dukungan teknis Microsoft:

http://support.microsoft.com/search/default.aspx?qu=vinterdev

Perlu bantuan lainnya?

Kembangkan keterampilan Anda
Jelajahi pelatihan
Dapatkan fitur baru terlebih dahulu
Gabung Microsoft Insider

Apakah informasi ini bermanfaat?

Terima kasih atas umpan balik Anda!

Terima kasih atas umpan balik Anda! Sepertinya menghubungkan Anda ke salah satu agen dukungan Office kami akan sangat membantu.

×