2015-07-28 80 views
1

背景:我试图在ASP.Net页面上显示来自Ax2012数据库的图像。将AxaptaContainer转换为Byte []或Base64

问题:图像存储在Ax2012数据库中作为一个BLOB(或井,斧头容器)。我必须在我的C#.Net Web服务(通过BusinessConnector连接)中将其转换为Byte数组,或者直接转换为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") %>'/> 

我也试了一下强制转换为字符串,在这种情况下,我没有得到任何异常抛出,也没有图像;)

有什么建议吗?

感谢

回答

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; 
} 

然后调用背后的getImageAsBase64png.cs代码:

axRecord.Call('getImageAsBase64png'); 
+0

谢谢马捷,将会给它一试早上! –