1

背景: ASP.Net ページに Ax2012 DB の画像を表示しようとしています。

問題:画像が Ax2012 DB に BLOB (または Ax コンテナー) として保存されます。これを C#.Net Web サービス (BusinessConnector 経由で接続) でバイト配列に変換するか、直接 Base64 文字列に変換する必要があります。

私は何をしましたか: 以下のコードでは、imageObjectがシリアル化できないという例外が発生します。これはある程度理解できますが、他にどのようにすればよいでしょうか?

コードビハインド:

while (axRecord.Found)
{
    string workerRecId          = axRecord.get_Field("WorkerRecId").ToString();
    string name                 = axRecord.get_Field("Name").ToString();

    string image;
    using (MemoryStream ms = new MemoryStream())
    {
        AxaptaContainer imageObject = (AxaptaContainer)axRecord.get_Field("Image");
        new BinaryFormatter().Serialize(ms, imageObject);
        image = Convert.ToBase64String(ms.ToArray());
    }

    string wppServiceWarehouse  = axRecord.get_Field("WPPServiceWarehouse").ToString();

    dataTable.Rows.Add(new object[] { workerRecId, name, image, wppServiceWarehouse });
    axRecord.Next();
}

ASP ページ:

<asp:Image id="employee_ProfilePhoto"   runat="server" imageUrl='<%# "data:image/png;base64," + Eval("Image") %>'/>

また、それを文字列にキャストしようとしましたが、その場合、例外はスローされませんが、画像もスローされません;)

何かアドバイス?

ありがとう

4

1 に答える 1

2

コンテナーを base64 でエンコードされた PNG に変換する必要があります。

このメソッドをHcmPersonImage(または任意の) テーブルに追加できます。

public str getImageAsBase64png()
{
    Image   imgObj;
    BinData bd;
    str result;

    if (this.Image)
    {
        imgObj = new Image(this.Image);
        imgObj.saveType(ImageSaveType::PNG);

        bd = new BinData();
        bd.setData(imgObj.getData());
        result = bd.base64Encode();
    }
    else
    {
        result = "";
    }
    return result;
}

そして、getImageAsBase64pngin.csコード ビハインドを呼び出します。

axRecord.Call('getImageAsBase64png');
于 2015-07-28T13:05:06.163 に答える