3

アクセスフォームから画像を抽出する方法を探していました。Googleでの検索は、ほとんどの場合OLEtoDiskを指します。このソフトウェアを使用すると、アクセステーブル内のOLEフィールドに保存されている画像をエクスポートできます。これは私が望むものではありません。

いくつかのロゴ、ヘッダー、背景画像を含むフォームがあります。これらの画像は、データベースをますます大きくしています(フォームに埋め込まれているため)。それらを抽出し、バックエンドファイルと一緒にサーバーに配置してフォームに追加しますが、今回は埋め込み画像ではなくリンク画像として追加します。

私は自分自身を明確にしていることを願っています。どんな提案でも大歓迎です。

編集:画像コントロールのPictureDataを画像ファイルとしてエクスポートするために使用しているコードを追加しました。このコードは意図したとおりに機能しません。PictureDataはバイト配列であることがわかりましたが、ファイルにコピーした後、2文字ごとに1つのNUL文字を取得します。

Public Function savePict(pImage As Access.Image)
    Dim fname As String 'The name of the file to save the picture to
    Dim iFileNum As Double

    fname = Environ("Temp") + "\temp.png" ' Destination file path
    iFileNum = FreeFile 'The next free file from the file system

    Open fname For Binary Access Write As iFileNum
        Dim tbyte As Variant
        Dim i As Double
        'Write the byte array to the file
        For i = 0 To Len(pImage.PictureData)
            Put #iFileNum, , pImage.PictureData(i)
        Next i
    Close #iFileNum
End Function
4

4 に答える 4

4

画像データは、8バイトのラッパーを持つEMFファイルです。これは、正しいファイル拡張子を使用するように変更されたルーチンです

Public Function savePict(pImage As Access.Image)
    Dim fname As String 'The name of the file to save the picture to
    Dim iFileNum As Double
    Dim bArray() As Byte, cArray() As Byte
    Dim lngRet As Long

    fname = Environ("Temp") + "\temp.emf" ' Destination file path
    iFileNum = FreeFile 'The next free file from the file system

    ' Resize to hold entire PictureData prop
    ReDim bArray(LenB(pImage.PictureData) - 1)
    ' Resize to hold the EMF wrapped in the PictureData prop
    ReDim cArray(LenB(pImage.PictureData) - (1 + 8))
    ' Copy to our array
    bArray = pImage.PictureData
    For lngRet = 8 To UBound(cArray) 
        cArray(lngRet - 8) = bArray(lngRet)
    Next

    Open fname For Binary Access Write As iFileNum
    'Write the byte array to the file
    Put #iFileNum, , cArray
    Close #iFileNum
End Function
于 2012-05-29T18:28:25.797 に答える
3

最後に、意図したとおりに機能したコードを示します。フォームのImageコントロールからPNG画像をエクスポートします。

Public Function savePict(pImage As Access.Image)
    Dim fname As String 'The name of the file to save the picture to
    fname = Environ("Temp") + "\temp.png" ' Destination file path

    Dim iFileNum As Double
    iFileNum = FreeFile 'The next free file from the file system

    Dim pngImage As String 'Stores the image data as a string
    pngImage = StrConv(pImage.PictureData, vbUnicode) 'Convert the byte array to a string

    'Writes the string to the file
    Open fname For Binary Access Write As iFileNum
        Put #iFileNum, , pngImage
    Close #iFileNum
End Function
于 2012-05-30T03:53:43.463 に答える
1
  1. 好きな背景画像またはオートフォーマットを含むフォームを作成します
  2. ナビゲーションペインでフォームを右クリックし、[エクスポート]>>[XML]を選択します
  3. ウィザードの最初のページで、いくつかのファイルをドロップする宛先を選択します(デスクトップは問題ありません)
  4. 次に、3つのチェックボックスを含む小さなダイアログが表示されます
  5. 最初のオプション(データ)と3番目のオプション(プレゼンテーション)を選択し、[OK]をクリックします
  6. エクスポートが完了したら、ウィザードの最後のページにある[閉じる]ボタンをクリックします
于 2018-01-05T17:38:34.517 に答える
0

別のアクセスデータベースで画像を再利用しようとしている場合(つまり、元の画像ファイルを失ったが、他の場所で使用したい場合)、はるかに簡単な方法は、オブジェクト(フォーム、レポートなど)を新しいものにインポートすることです。 [外部データ]->[アクセス]メニューを使用してデータベースにアクセスします。

次に、使用する場所に画像コントロールをコピーして貼り付けることができます...

残念ながら、Accessデータベース間での画像コントロールのコピー/貼り付けは、希望どおりに機能しません。

于 2015-06-27T21:48:32.577 に答える