Cum se prelua Bitmap de acces și se afișează în pagina Web


Rezumat


Acest articol prezintă de exemplu cum se extrage fotografii bitmap în baza de date Microsoft Access 97 Nwind.mdb și le vizualiza dintr-un browser Web folosind Active Server Pages (ASP). Pentru a se realizează această activitate, un ActiveX DLL trebuie să fie create benzi că anteturile de acces și OLE din domeniu. Acest articol arată cum se creează acest ActiveX DLL, și cum se implementează o.

Mai multe informații


Avertisment: utilizarea de către dumneavoastră a codul furnizat în acest articol este pe propriul risc. Microsoft oferă acest cod "ca atare" fără niciun fel, fie expresă sau implicită, inclusiv, dar nu se limitează la garanţiile implicite de vandabilitate şi/sau potrivire pentru un anumit scop.


Acest articol demonstrează modul de utilizare a Visual Basic pentru a regăsi bitmap stocate într-un câmp obiect OLE. Deoarece nu este documentată definiții de stocare de obiect OLE, următorul cod caută obiect OLE antet pentru caractere cu începutul grafic. Această metodă să nu funcționeze în toate circumstanțe.


Rețineți că Internet Explorer 3.0 este imposibil de afișat adevărat culoare bitmapuri. De aceea, bitmapuri stocate în baza de date Access trebuie să fie nu mai mare de 256 de culori.

Exemplu pas cu pas pentru a extrage fotografii

  1. Creați un nou proiect în Visual Basic și face proiectul un DLL ActiveX.
  2. Adăugați o referință la ActiveX Data Objects (ADO) făcând clic pe meniul Project și selectând referințe. Selectați "Microsoft OLE DB ActiveX Data Objects 1.0 Biblioteca" și faceți clic pe OK.
  3. Adăugați un nou modul pentru proiectul selectând meniul Project și făcând clic pe Adăugare Module. Selectați modulul și faceți clic pe Deschidere.
  4. Plasați următorul cod în secțiunea (general) (declarații) de 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. Plasați următorul cod în secțiunea CLASS1 (general) (declarații). 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. Redenumiți proiectul selectând meniul Project, și făcând clic pe "Proprietăți Project1" și tastați numele nou în câmpul "Numele de proiect". Acest exemplu presupune că ați denumit proiectul "MyProject" şi fac referire la acest nume în viitor pași.
  7. Bifați caseta de selectare "Executare nesupravegheate". Faceți clic pe OK.
  8. Redenumiți clase în panoul de proprietate. Acest exemplu presupune că este denumit clasa "MyClass" și se referă la acest nume în viitor pași.
  9. Compila DLL făcând clic pe meniul fișier și selectând "Face MyProject.dll."
  10. Creați o pagină ASP denumit "bitmap.asp", care conține codul următor:
          <%@ 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. Creați o pagină HTML, denumit "BitmapTest.htm", care conține codul următor:
          <HTML>
    <HEAD>
    <TITLE>Bitmap Test</TITLE>
    </HEAD>
    <BODY>
    <HR>
    <img src="Bitmap.asp">
    <HR>
    </BODY>
    </HTML>

Referințe


Pentru informații suplimentare, consultați următorul articol din baza de cunoștințe Microsoft:

173308 cum se afișează imaginile stocate într-un câmp BLOB

Pentru cele mai recente prevederilor de baza de cunoștințe și alte informații de asistență pe Visual InterDev și Active Server Pages, consultați următoarea pagină pe site-ul de asistență tehnică Microsoft: