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
-
Membuat proyek baru dalam Visual Basic dan membuat proyek DLL ActiveX.
-
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.
-
Menambahkan modul baru ke proyek dengan memilih menu proyek dan mengklik Tambah modul. Pilih modul dan klik buka.
-
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 -
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 -
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.
-
Pilih kotak centang "Eksekusi tanpa pengawasan". Klik Oke.
-
Ganti nama kelas dalam jendela properti. Contoh ini mengasumsikan bahwa Anda diberi nama kelas "MyClass" dan merujuk ke nama tersebut dalam langkah-langkah berikutnya.
-
Kompilasi DLL dengan mengklik menu berkas dan memilih "Membuat MyProject.dll."
-
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
%> -
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