当前位置:编程学习 > C#/ASP.NET >>

.net取得图片的大小代码

.NET上注册图片需要我提供width和height信息TWaver.Utils.RegisterImageByImageSource(string name, ImageSource imageSource, double width, double height)呢,这问题要怪应该怪微软,为什么Silverlight上非得将Image绑定上source并且真是display出来后才能真的得到width和height信息,当组件还没呈现时你去获取image的宽高只能得到0。

internal static void RegisterPNGImage(string name, Uri uri)
        {
            StreamResourceInfo resourceInfo = Application.GetResourceStream(uri);
            if (resourceInfo != null && resourceInfo.Stream != null)
            {
                BitmapImage image = new BitmapImage();
#if SILVERLIGHT
                image.SetSource(resourceInfo.Stream);
#else
                image.BeginInit();
                image.StreamSource = resourceInfo.Stream;
                image.EndInit();
#endif
                resourceInfo.Stream.Position = 0;
                byte[] header = new byte[8];
                resourceInfo.Stream.Read(header, 0, header.Length);
                if (header[0] == 0x89 &&
                    header[1] == 0x50 && // P
                    header[2] == 0x4E && // N
                    header[3] == 0x47 && // G
                    header[4] == 0x0D && // CR
                    header[5] == 0x0A && // LF
                    header[6] == 0x1A && // EOF
                    header[7] == 0x0A)   // LF
                {
                    byte[] buffer = new byte[16];
                    resourceInfo.Stream.Read(buffer, 0, buffer.Length);
                    Array.Reverse(buffer, 8, 4);
                    Array.Reverse(buffer, 12, 4);

                    double width = BitConverter.ToInt32(buffer, 8);
                    double height = BitConverter.ToInt32(buffer, 12);

                    resourceInfo.Stream.Close();
                    ImageUtils.RegisterImageAsset(name, new ImageAsset(image, width, height));

                    return;
                }
                resourceInfo.Stream.Close();
            }
            new Exception("Can not load PNG Image '" + name + "' URI: " + uri);
        }

在此我替微软向去年当TWaver .NET还在beta中就已经开始在项目中预言和使用客户道歉,我们没有彻底做到DRY,不过始终坚持最大程序减少用户工作量原则的TWaver开发团队,在正式TWaver .NET 1.0发布时提供了让人更舒心的RegisterPNGImage(string name, Uri uri)函数,是的,你不用在告诉TWaver宽高了,TWaver会自动的去获取,至于如何获取很多同学很感兴趣,以下实现代码原理很简单我就不解释了,总之条条道路通罗马,Silverlight不提供的我们也能走出自己的路

补充:asp.net教程,.Net开发 
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,