Jak pobrać mapy bitowej z dostępu i wyświetlania go na stronie sieci Web

Streszczenie

W tym artykule przedstawiono przykład wyodrębnić zdjęcia bitmapy w bazie danych programu Microsoft Access 97 Northwind.mdb i wyświetlić je w przeglądarce sieci Web, przy użyciu Active Server Pages (ASP). Aby wykonać to zadanie, ActiveX DLL musi zostać utworzony ten paski nagłówków dostępu i OLE z pola. W tym artykule przedstawiono sposób tworzenia tej biblioteki DLL ActiveX i sposobu jej wdrożenia.

Więcej informacji

Ostrzeżenie: korzystanie przez niego kod postanowień tego artykułu jest na własne ryzyko. Firma Microsoft udostępnia ten kod "tak jak są" bez jakiejkolwiek gwarancji, wyraźnych ani dorozumianych, w tym między innymi dorozumianych gwarancji przydatności handlowej i przydatności do określonego celu.


W tym artykule przedstawiono sposób użycia języka Visual Basic do pobrania mapy bitowej, przechowywane w polu obiektu OLE. Ponieważ definicja miejsca przechowywania obiektu OLE nie jest dostępna, poniższy kod przeszukuje obiektu OLE nagłówka dla znaków zgodne z początkiem grafiki. Metoda ta może nie działać w każdych okolicznościach.


Należy pamiętać, że program Internet Explorer 3.0 nie można wyświetlić mapy bitowe w trybie true color. Z tego powodu mapy bitowe, przechowywane w bazie danych programu Access nie były wyższe niż 256 kolorów.

Przykład krok po kroku, aby wyodrębnić zdjęcia

  1. Utwórz nowy projekt w języku Visual Basic i utworzyć projekt ActiveX DLL.

  2. Dodaj odwołanie do ActiveX Data Objects (ADO), klikając menu Projekt i wybierając odwołania. Wybierz "Microsoft OLE DB ActiveX Data Objects 1.0 Library" i kliknij przycisk OK.

  3. Dodać nowy moduł do projektu przez wybranie menu Projekt, a następnie klikając polecenie Dodawanie modułu. Wybierz moduł, a następnie kliknij przycisk Otwórz.

  4. Umieść następujący kod w sekcji MODULE1 (Ogólne) (deklaracje). DOLNY:

          ' 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. Umieść następujący kod w sekcji CLASS1 (Ogólne) (deklaracje). 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. Zmień nazwę projektu przez wybranie menu Projekt, a następnie klikając polecenie "Właściwości projektu1" i wpisz nową nazwę w polu "Nazwa projektu". W tym przykładzie przyjęto założenie, nazwę projektu "MyProject" i będzie odnosić się do tej nazwy na kolejnych etapach.

  7. Zaznacz pole wyboru "Wykonanie instalacji nienadzorowanej". Kliknij przycisk OK.

  8. Zmień nazwę klasy w okienku właściwości. W tym przykładzie założono, że o nazwie klasy "MyClass" i odnosi się do tej nazwy na kolejnych etapach.

  9. Kompiluj biblioteki DLL, klikając menu plik i wybierając "Make MyProject.dll."

  10. Utwórz stronę ASP o nazwie "bitmap.asp", która zawiera poniższy kod:

          <%@ 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. Utwórz stronę HTML o nazwie "BitmapTest.htm", która zawiera poniższy kod:

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

Powiązane artykuły

Aby uzyskać dodatkowe informacje zobacz następujący artykuł z bazy wiedzy Microsoft Knowledge Base:

173308 jak wyświetlanie obrazów przechowywanych w polu BLOB

Uzyskać najnowsze art bazy wiedzy Knowledge Base i inne informacje na Visual InterDev i Active Server Pages można znaleźć na następującej stronie w witrynie Pomoc techniczna firmy Microsoft:

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

Potrzebna dalsza pomoc?

Rozwijaj swoje umiejętności
Poznaj szkolenia
Uzyskuj nowe funkcje w pierwszej kolejności
Dołącz do niejawnych testerów firmy Microsoft

Czy te informacje były pomocne?

Dziękujemy za opinię!

Dziękujemy za opinię! Wygląda na to, że połączenie Cię z jednym z naszych agentów pomocy technicznej pakietu Office może być pomocne.

×