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
-
Vytvoření nového projektu v jazyce Visual Basic a proveďte ActiveX DLL projektu.
-
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.
-
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.
-
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 -
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 -
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.
-
Zaškrtněte políčko "Unattended Execution". Klepněte na tlačítko OK
-
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.
-
Zkompilujte knihovnu DLL klepněte v nabídce soubor a výběrem "Vytvořit MyProject.dll."
-
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
%> -
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