Souhrn

Tento článek podle příklad ukazuje, jak extrahovat rastrový obrázek fotografie v databázi aplikace Microsoft Access 97 Nwind.mdb a prohlížet pomocí webového prohlížeče pomocí stránky ASP (Active Server). K provedení této úlohy, ActiveX DLL musí být vytvořen tento pruhy záhlaví přístup a OLE z pole. Tento článek ukazuje, jak vytvořit tento ActiveX DLL a jak ji implementovat.

Další informace

Upozornění: jakékoli použití vámi kód poskytnuté v tomto článku je na svoje vlastní riziko. Společnost Microsoft poskytuje tento kód "tak, jak je" bez záruky jakéhokoli druhu, ať výslovných nebo předpokládaných včetně, ale nikoli výhradně, mlčky předpokládaných záruk obchodovatelnosti nebo vhodnosti pro určitý účel.


Tento článek ukazuje, jak načíst rastrový obrázek uložený v poli typu objekt OLE pomocí jazyka Visual Basic. Protože není popsána definice úložiště objektu OLE, vyhledá následující kód na objekt OLE záhlaví pro znaky konzistentní s počáteční grafiky. Tato metoda nemusí fungovat za všech okolností.


Uvědomte si, že je aplikace Internet Explorer 3.0 nelze zobrazit rastrové obrázky v režimu true color. Z tohoto důvodu by měla být vyšší než 256 barev bitmapy uložené v databázi aplikace Access.

Podrobný příklad extrahovat fotografie

  1. Vytvoření nového projektu v jazyce Visual Basic a proveďte ActiveX DLL projektu.

  2. V nabídce Projekt a výběrem odkazy přidáte odkaz na objekty ADO (ActiveX Data). Vyberte "Microsoft OLE DB ActiveX Data objekty 1.0 knihovny" a klepněte na tlačítko OK.

  3. Přidáte nový modul do projektu výběrem nabídce Projekt a klepnutím na tlačítko Přidat modul. Vyberte modul a klepněte na tlačítko Otevřít.

  4. Umístěte následující kód v modul 1 v části (Obecné) (deklarace). 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. Umístěte následující kód v CLASS1 v části (Obecné) (deklarace). 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. Přejmenovat projektu výběrem nabídce Projekt a klepnutím na "Project1 Properties" a zadejte nový název do pole "Název projektu". Tento příklad předpokládá název projektu "MyProject" a bude odkazovat tento název budoucí kroky.

  7. Zaškrtněte políčko "Unattended Execution". Klepněte na tlačítko OK

  8. Přejmenujte třídu v podokně Vlastnosti. Tento příklad předpokládá s názvem třídy "Moje_třída" a odkazuje na tento název budoucí kroky.

  9. Zkompilujte knihovnu DLL klepněte v nabídce soubor a výběrem "Vytvořit MyProject.dll."

  10. Vytvořte stránku ASP s názvem "bitmap.asp" obsahující následující kód:

          <%@ 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. Vytvořte stránku HTML s názvem "BitmapTest.htm" obsahující následující kód:

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

Odkazy

Další informace naleznete v následujícím článku znalostní báze Microsoft Knowledge Base:

173308 způsob zobrazení obrázků uložených v poli BLOB

Nejnovější článků znalostní báze Knowledge Base a další informace o odborné pomoci na Visual InterDev a Active Server Pages naleznete na následující stránce na webu technické podpory společnosti Microsoft:

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

Potřebujete další pomoc?

Rozšiřte své znalosti a dovednosti
Projít školení
Získejte nové funkce jako první
Připojit se k programu Microsoft Insider

Byly tyto informace užitečné?

Jak jste spokojeni s kvalitou jazyka?
Co ovlivnilo váš názor?

Děkujeme vám za zpětnou vazbu.

×