私の汚いコードを公開するために、ここで私が思いついたものを公開します。
注 : これは、一度使用したら捨てるように設計されたハックです。
このメソッドは、アクセス テーブルから 1 行のデータを含む datarowview を取得します。画像は OLE シリアライゼーションでラップされています。これがどのように機能するかについては完全にはわかりませんが、Microsoft アプリがオブジェクトを別のものに埋め込む方法を知っています。(例: Excel セルへの画像)。画像の周りのシリアル化ジャンクを削除する必要があったため、フィールド全体をバイト配列としてロードし、フィールド内の画像データの開始を表す 3 つの同時エントリ (FF D8 FF) を検索しました。
Private Function GetImageFromRow(ByRef row As DataRowView, ByVal columnName As String) As Bitmap
Dim oImage As Bitmap = New Bitmap("c:\default.jpg")
Try
If Not IsDBNull(row(columnName)) Then
If row(columnName) IsNot Nothing Then
Dim mStream As New System.IO.MemoryStream(CType(row(columnName), Byte()))
If mStream.Length > 0 Then
Dim b(Convert.ToInt32(mStream.Length - 1)) As Byte
mStream.Read(b, 0, Convert.ToInt32(mStream.Length - 1))
Dim position As Integer = 0
For index As Integer = 0 To b.Length - 3
If b(index) = &HFF And b(index + 1) = &HD8 And b(index + 2) = &HFF Then
position = index
Exit For
End If
Next
If position > 0 Then
Dim jpgStream As New System.IO.MemoryStream(b, position, b.Length - position)
oImage = New Bitmap(jpgStream)
End If
End If
End If
End If
Catch ex As Exception
Throw New ApplicationException(ex.Message, ex)
End Try
Return oImage
End Function
次に、このデータをビットマップに引き出すだけです。したがって、アクセス テーブルの行ごとにビットマップを抽出し、対応する MySQL エントリを更新します。
それはうまくいきましたが、シリアライゼーションのものをより良い方法で削除できたと思います.おそらくそれを行うためのAPIがあります.