单击小图像时显示大图像

时间:2014-04-25 20:55:49

标签: javascript jquery asp.net

点击小图片时,我试图显示大图像。我有一个SQL表,我在其中存储图像,然后我在img控件中显示此图像。现在,当用户点击它时,我希望这个图像以更大尺寸的弹出窗口打开。

我从数据库中检索图像并在img控件中显示的代码是:

<script type="text/javascript">
    $('#image1Large').hide().click(function() {
        $(this).hide();
    });

    $('#image1').click(function() {
        $('#image1Large').attr('src', this.src)
            .show()
            .offset({ top: 0, left: 0 });
    });
</script>

<img  runat="server" id="image1" alt="" src="" height="100" width="100"/>
<img  runat="server" id="image1Large" alt=""/>

protected void LoadImage1()
{
    SqlCommand cmd = new SqlCommand("sps_getimage", con);
    cmd.CommandType = CommandType.StoredProcedure;
    cmd.Parameters.AddWithValue("@flag", 1);
    cmd.Parameters.AddWithValue("@ad_id", ad_id);
    con.Open();
    SqlDataReader reader = cmd.ExecuteReader(System.Data.CommandBehavior.SequentialAccess);
    if (reader.HasRows)
    {
        reader.Read();
        MemoryStream memory = new MemoryStream();
        long startIndex = 0;
        const int ChunkSize = 256;
        while (true)
        {
            byte[] buffer = new byte[ChunkSize];
            long retrievedBytes = reader.GetBytes(0, startIndex, buffer, 0, ChunkSize);
            memory.Write(buffer, 0, (int)retrievedBytes);
            startIndex += retrievedBytes;
            if (retrievedBytes != ChunkSize)
                break;
        }

        byte[] data = memory.ToArray();
        img1 = data;
        memory.Dispose();
        image1.Src = "data:image/png;base64," + Convert.ToBase64String(data);
    }
    con.Close();
}

1 个答案:

答案 0 :(得分:0)

这不是C#或SQL问题,而是客户端问题。由于您已经检索了图像并且仅通过height="100" width="100"属性调整了大小,因此您所要做的就是以原始大小显示相同的图像。有很多方法可以做到这一点,这是一个基本的方法:

添加另一个图像元素以保存更大的图像:

<img  runat="server" id="image1" alt="" src="" height="100" width="100"/>
<img  runat="server" id="image1Large" />

并添加此代码以初始隐藏较大的图片并在点击时显示:

$('#image1Large').hide().click(function(){
   $(this).hide();    
})


$('#image1').click(function(){
    $('#image1Large').attr('src', this.src)
                     .show()
                     .offset({top:0,left:0});    
})

以下是演示:http://jsfiddle.net/QH5a8/

在现实生活中,你需要调整它(可能需要对更大的图像进行额外的格式化和定位,也许可以在DIV容器中显示等等),但这就是想法。