小编tob*_*oby的帖子

IE6:背景图像加载事件

我正在显示一堆缩略图并且延迟可能非常高(通过VPN)所以我将所有缩略图发送到单个文件(如精灵)并设置div的CSS背景图像和背景位置属性显示缩略图.我遇到的问题是使用IE6并弄清楚图像何时加载...我正在使用BackgroundImageCache hack:

document.execCommand("BackgroundImageCache",false,true);
Run Code Online (Sandbox Code Playgroud)

要检查图像何时加载,我使用以下代码:

$('<img>').attr('src', 'ThumbSpriteTest.png').load(function() {
    $('.Thumbnails').css('background-image', 'url(ThumbSpriteTest.png)');
});
Run Code Online (Sandbox Code Playgroud)

这适用于我尝试过的每个浏览器,除了IE6 ...即使缓存黑客它正在加载图像,触发事件,设置背景图像属性并再次下载图像(我的.Thumbnail元素是空白的,而它重新下载).

在我看来,缓存黑客只是改变了CSS引用的行为,而不是img标签.如何加载背景图像而不下载两次?IE6有可能吗?

编辑:使用:document.execCommand("BackgroundImageCache",true,true);似乎工作(两个参数都为'true').我在找到有关BackgroundImageCache命令及其参数的任何文档时遇到了问题(我发现了很多使用它来修复CSS问题的例子,但它们都false,true用作参数而不解释它们)... 赏金对于在BackgroundImageCache命令及其参数上具有良好信息/文档的任何人来说仍然是好的!

(我不知道为什么我因为IE的缺点而浪费了这么多时间后发现一些有用的东西很兴奋)

javascript css jquery css-sprites internet-explorer-6

18
推荐指数
1
解决办法
3431
查看次数

Silverlight:来自流的BitmapImage抛出异常(灾难性故障(HRESULT异常:0x8000FFFF(E_UNEXPECTED)))

我需要动态加载许多(有时数百个)缩略图.出于性能原因,我需要在有限数量的请求中执行此操作,我使用单个请求/响应进行测试.我正在为响应中的图像发送二进制数据,并使用MemoryStream将它们加载到BitmapImage中.这工作正常,直到我加载超过约80个缩略图,然后我得到灾难性失败例外.为了确保我的数据没有损坏,我尝试使用相同的字节数组多次加载BitmapImage,并在80次左右加载后崩溃.

下面是从字节数组加载图像的示例,已知字节数组具有有效的图像数据(png):

private BitmapImage LoadImage(byte[] imageData)
{
    BitmapImage img = new BitmapImage();
    MemoryStream stream = new MemoryStream(imageData);
    img.SetSource(stream); // Exception thrown here after too many images loaded.
    return img;
}
Run Code Online (Sandbox Code Playgroud)

然后我使用BitmapImage作为页面上Image元素的源,但错误发生在img.SetSource(...)上面的行中.

添加GC.Collect()到我正在加载缩略图图像的循环允许我加载更多图像,所以我认为这与内存管理有关,但我不知道我能做些什么来解决问题.

.net silverlight bitmapimage

7
推荐指数
1
解决办法
3286
查看次数

从WebBrowser控件保存图像

运行以下代码,但生成的位图向下移动大约半英寸并在底部截止.我检查了图像的宽度和高度,它创建了一个正确尺寸的图像,只是图像内容向下移动和截止.我很难过......任何想法?

    using mshtml;
    using System.Drawing;
    using System.Runtime.InteropServices;

    [ComImport, InterfaceType((short)1), Guid("3050F669-98B5-11CF-BB82-00AA00BDCE0B")]
    private interface IHTMLElementRenderFixed
    {
        void DrawToDC(IntPtr hdc);
        void SetDocumentPrinter(string bstrPrinterName, IntPtr hdc);
    }

    public Bitmap GetImage(string id)
    {
        HtmlElement e = webBrowser1.Document.GetElementById(id);
        IHTMLImgElement img = (IHTMLImgElement)e.DomElement;
        IHTMLElementRenderFixed render = (IHTMLElementRenderFixed)img;

        Bitmap bmp = new Bitmap(img.width, img.height);
        Graphics g = Graphics.FromImage(bmp);
        IntPtr hdc = g.GetHdc();
        render.DrawToDC(hdc);
        g.ReleaseHdc(hdc);

        return bmp;
    }
Run Code Online (Sandbox Code Playgroud)

.net c# browser

5
推荐指数
0
解决办法
1万
查看次数