Đăng nhập với Microsoft
Đăng nhập hoặc tạo tài khoản.
Xin chào,
Chọn một tài khoản khác.
Bạn có nhiều tài khoản
Chọn tài khoản bạn muốn đăng nhập.

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

  1. Tạo một dự án trong Visual Basic và thực hiện các dự án một ActiveX DLL.

  2. 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.

  3. 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ở.

  4. Đặ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
  5. Đặ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
  6. Đổ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.

  7. Chọn hộp kiểm "Tự động thực hiện". Bấm OK.

  8. Đổ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.

  9. Biên dịch DLL bằng cách bấm vào File menu và chọn "Làm MyProject.dll."

  10. 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
    %>
  11. 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

Bạn cần thêm trợ giúp?

Phát triển các kỹ năng của bạn
Khám phá nội dung đào tạo
Sở hữu tính năng mới đầu tiên
Tham gia Microsoft dùng nội bộ

Thông tin này có hữu ích không?

Bạn hài lòng đến đâu với chất lượng dịch thuật?
Điều gì ảnh hưởng đến trải nghiệm của bạn?

Cảm ơn phản hồi của bạn!

×