1

背景:我正在尝试在 ASP.Net 页面上显示来自 Ax2012 DB 的图像。

问题:图像作为 BLOB(或者说是 Ax 容器)存储在 Ax2012 DB 中。我必须在我的 C#.Net 网络服务(通过 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 回答