如何在不使用图像url的情况下将内存流绑定到asp.net图像控件

如何在不使用图像url的情况下将内存流绑定到asp.net图像控件,asp.net,Asp.net,我们有一个新的要求,即在结果网格中显示每个记录的签名图像。目前,我们在数据库中以base64格式存储签名图像。我们能够将base64转换为内存流。 我们想了解您的图像控件是否支持从内存流而不是Url绑定图像。您可以将图像保留为base64字符串形式,并使用数据Url。 下面是一个例子 <asp:Image runat="server" ID="myImage" /> 前提是您需要知道所有MIME类型的图像 参考资料:当然,你可以这样做

我们有一个新的要求,即在结果网格中显示每个记录的签名图像。目前,我们在数据库中以base64格式存储签名图像。我们能够将base64转换为内存流。
我们想了解您的图像控件是否支持从内存流而不是Url绑定图像。

您可以将图像保留为base64字符串形式,并使用数据Url。 下面是一个例子

   <asp:Image runat="server" ID="myImage" />
前提是您需要知道所有MIME类型的图像


参考资料:

当然,你可以这样做

gridview、listview、repeater控件—它们都可以做到这一点

因此,网格视图的标记:

       <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False">
            <Columns>
                <asp:BoundField DataField="Animal" HeaderText="Animal" ItemStyle-Width="200px"/>

                <asp:TemplateField HeaderText="Picture">
                    <ItemTemplate>
                        <asp:Image ID="Image1" runat="server" 
                            Height="128px" Width="128px"
                            src='<%# "Data:Image/png;base64," + Eval("Image") %>' 
                         />
                    </ItemTemplate>
                </asp:TemplateField>

            </Columns>
        </asp:GridView>
结果:

现在,我使用了一个直接求值表达式,但也可以使用gridview(或列表视图)的ItemDataBound事件

此外,我还硬编码了上面的“我的”类型(假定为.png)。您可能经常需要考虑将文件/挖掘类型保存为数据库中的额外列。但是,如果图片类型都是相同的类型,那么在上面的表达式中使用硬代码就可以了

如果这个网格有很多列,那么我倾向于切换到listview,因为每个列都不需要模板,我发现快速和脏的网格视图是可以的,但是listview更适合调整和大量定制。诀窍是让VisualStudio生成模板+标记,然后吹出除item template之外的所有模板。当你这么做的时候,疯狂的标记会被减少到“简单”的程度。然后,您可以更轻松地插入控件,而不必使用模板

因此,上述相同的列表视图如下所示:

        <asp:ListView ID="ListView1" runat="server">
            <ItemTemplate>
                <tr style="">

                    <td><asp:Label ID="AnimalLabel" runat="server" Text='<%# Eval("Animal") %>' /></td>
                    <td>
                        <asp:Image ID="ImageT1" runat="server" 
                            Height="128px" Width="128px"
                            src='<%# "Data:Image/png;base64," + Eval("Image") %>' 
                         />
                    </td>
                </tr>
            </ItemTemplate>

            <LayoutTemplate>
                <table id="itemPlaceholderContainer" runat="server" border="0" style="">
                    <tr runat="server" style="">
                        <th runat="server" width="200">Animal</th>
                        <th runat="server">Image</th>
                    </tr>
                    <tr id="itemPlaceholder" runat="server">
                    </tr>
                </table>
            </LayoutTemplate>
        </asp:ListView>


后面的代码将与上面的100%相同。

您的意思是要以json数据显示来自服务器的图像作为标记吗?不,我必须将该内存流绑定到标记谢谢您提供base 64 to bmp转换器链接,但我不需要该转换器链接。我正在从数据库中获取图像的base 64值,我想使用asp.net图像控件将其转换为图像,而不使用asp图像控件标记中的图像url属性。非常感谢,它对我有效
        <asp:ListView ID="ListView1" runat="server">
            <ItemTemplate>
                <tr style="">

                    <td><asp:Label ID="AnimalLabel" runat="server" Text='<%# Eval("Animal") %>' /></td>
                    <td>
                        <asp:Image ID="ImageT1" runat="server" 
                            Height="128px" Width="128px"
                            src='<%# "Data:Image/png;base64," + Eval("Image") %>' 
                         />
                    </td>
                </tr>
            </ItemTemplate>

            <LayoutTemplate>
                <table id="itemPlaceholderContainer" runat="server" border="0" style="">
                    <tr runat="server" style="">
                        <th runat="server" width="200">Animal</th>
                        <th runat="server">Image</th>
                    </tr>
                    <tr id="itemPlaceholder" runat="server">
                    </tr>
                </table>
            </LayoutTemplate>
        </asp:ListView>