Tóm tắt
Bài viết này cho thấy ví dụ làm thế nào để trích xuất các hình ảnh bitmap trong cơ sở dữ liệu Microsoft Access 97 Nwind.mdb và xem chúng từ trình duyệt Web bằng cách sử dụng trang chủ hiện hoạt (ASP). Để thực hiện tác vụ này, một ActiveX DLL phải được tạo ra rằng dải tiêu đề OLE và truy cập từ trường. Bài viết này trình bày cách tạo ActiveX DLL này và cách thực hiện.
Thông tin
Cảnh báo: sử dụng bất kỳ của bạn mã được cung cấp trong bài viết này là rủi ro của riêng bạn. Microsoft cung cấp mã này "là" không có bảo hành nào, hoặc rõ ràng hay ngụ ý, bao gồm nhưng không giới hạn bảo đảm bán và/hoặc cho một mục đích cụ thể.
Bài viết này giải thích cách sử dụng Visual Basic để lấy bitmap được lưu trữ trong một trường đối tượng OLE. Vì định lượng đối tượng OLE không được ghi lại, mã sau tìm kiếm các đối tượng OLE tiêu đề tự phù hợp với đầu của hình. Phương pháp này có thể không hoạt động trong mọi trường hợp.
Xin lưu ý rằng Internet Explorer 3.0 không thể hiển thị đúng màu bitmap. Vì lý do này, bitmap được lưu trữ trong cơ sở dữ liệu Access sẽ không cao hơn với 256 màu.
Hướng dẫn giải nén ảnh
-
Tạo một dự án trong Visual Basic và thực hiện các dự án một ActiveX DLL.
-
Thêm một tham chiếu đến các đối tượng dữ liệu ActiveX (ADO) bằng cách bấm vào Project menu, chọn tài liệu tham khảo. Chọn "Microsoft OLE DB ActiveX dữ liệu đối tượng 1.0 thư viện" và bấm OK.
-
Thêm một mô-đun mới vào dự án bằng cách chọn Project menu và bấm Thêm mô-đun. Chọn mô-đun và bấm mở.
-
Đặt mã sau trong phần MODULE1 (chung) (tuyên bố). 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 -
Đặt mã sau trong phần CLASS1 (chung) (tuyên bố). 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 -
Đổi tên dự án bằng cách chọn menu dự án, nhấp vào "Project1 thuộc tính" và nhập tên mới vào trường "Tên dự án". Ví dụ này giả định rằng bạn đặt tên dự án "MyProject" và sẽ chỉ tên trong bước này trong tương lai.
-
Chọn hộp kiểm "Tự động thực hiện". Bấm OK.
-
Đổi tên lớp trong cửa sổ thuộc tính. Ví dụ này giả định rằng bạn tên lớp "MyClass" và đề cập đến tên trong bước này trong tương lai.
-
Biên dịch DLL bằng cách bấm vào File menu và chọn "Làm MyProject.dll."
-
Tạo trang ASP có tên "bitmap.asp" có chứa mã sau:
<%@ 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
%> -
Tạo một trang HTML có tên "BitmapTest.htm" có chứa mã sau:
<HTML>
<HEAD>
<TITLE>Bitmap Test</TITLE>
</HEAD>
<BODY>
<HR>
<img src="Bitmap.asp">
<HR>
</BODY>
</HTML>
Tham khảo
Để biết thêm thông tin, hãy xem bài viết sau trong Cơ sở Kiến thức Microsoft:
173308 làm thế nào để hiển thị các hình ảnh được lưu trữ trong trường BLOB
Cơ sở kiến thức artices mới nhất và thông tin hỗ trợ Visual InterDev và Active Server Pages, hãy xem trang sau trên trang web hỗ trợ kỹ thuật của Microsoft:
http://support.microsoft.com/search/default.aspx?qu=vinterdev