Archive

Archive for the ‘Deep Zoom’ Category

Tool des Tages: http://zoom.it/

August 6th, 2010 The-Oliver No comments

Viele kennen den Begriff Zoom It von dem netten kleinen Presenter-Tool.

Von dem ist hier nicht die Rede, sondern von der Webseite http://zoom.it . Dieses Tool kann ganze Webseiten in ein Deep Zoom umwandeln.

Das Ergebnis ist recht witzig.

image

Meine Homepage als Zoom.It

Categories: Cool, Deep Zoom, Silverlight Tags:

Stern Gallerie mit Deep Zoom

July 1st, 2010 The-Oliver No comments

Unter http://www.stern.de/gallery/ setzt mit Stern.de eine der größten deutschen und innovativsten Websites auf Silverlight. Die Bilder werden automatisiert aus RSS-Feed gelesen und täglich aktualisiert. Die Lösung basiert auf SilverHD.net, welches sich am neuartigen METRO-Design, dem Lock-and-Feel der Windows Phone 7 Geräte, orientiert. Hochauflösende Bilder werden in HD Qualität darstellt, Möglichkeiten zur Integration von Videos, Blogs und Social Media sind über ein einfaches Webinterface ermöglicht. Die SilverHD Gallery generiert bis zu 50% mehr Page-Impression als klassische Gallerien und erhöht dank der neuartigen User Experience für eine Steigerung der Verweildauer der Nutzer.

360° Panorama mit Silverlight und Photosynth

May 31st, 2010 The-Oliver No comments

Photosynth ist ein sehr einfaches Werkzeug um Fotos in einem Dreidimensionalen Raum anordnen zu lassen. Es ist sehr einfach zu bedienen und macht dabei unglaublich viel Spaß.

Man muss lediglich Bilder in Photosynth hineinladen und der Rest geschieht von selbst. Photosynth erkennt Ecken, Kanten und diverses mehr und setzt die Bilder in einem 3D-Raum neu zusammen.

image

Link: www.photosynth.net

Categories: Deep Zoom, Deutsch, Silverlight Tags:

Daily Demo: Weekly Summary

March 29th, 2010 The-Oliver No comments

Last week I did it again, five nice demos for Silverlight 3 usage, with live Previews and Sourcecode.

22.03.2010 – Silverlight 3 Deep Zoom Mouse Zoom Features Behavior // Preview

23.03.2010 – Silverlight 3 Deep Zoom Navigate Home Behavior // Preview

24.03.2010 – Silverlight 3 Deep Zoom Randomizing Images // Preview

25.03.2010 – Silverlight 3 Deep Zoom Slide Show Behavior // Preview

26.03.2010 – Silverlight 3 Mouse 3D Behavior // Preview

If you have any suggestions for nice Daily Demos, please comment ..

Best regards,
The-Oliver

Recent demos:

15.03.2010 – Silverlight 3: Text Tipping Control // [Preview]

16.03.2010 – Silverlight 3: Image Spindle // [Preview]

17.03.2010 – Silverlight 3: Image Stack // [Preview]

18.03.2010 – Silverlight 3: Behavior – 3D Hover Effect // [Preview]

19.03.2010 – Silverlight 3: Trigger Action – Fullscreen // [Preview]

Daily Demo: Silverlight Deep Zoom Slide Show Behavior

March 25th, 2010 The-Oliver No comments

Deep Zooms are very useful for catalog systems or holiday photos. You can get a big impression of all your images, but when you want to step through each single picture, navigation could get a little bit challenging … until now. Here is a small behavior to step through each single photo in a deep zoom collection.

image

Live Preview

XAML Code

<UserControl
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d"
    xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"
    xmlns:TheOliver_Controls="clr-namespace:TheOliver.Controls"
    x:Class="DeepZoomMouseBehavior.MainPage"
    d:DesignHeight="300"
    d:DesignWidth="400">

    <Grid
        x:Name="LayoutRoot"
        Background="White">
        <TextBlock
            Text="Deep Zoom Sample" />
        <MultiScaleImage
            x:Name="_msi"
            Source="Images/dzc_output.xml"
            Margin="0,19,0,0">
            <i:Interaction.Behaviors>
                <TheOliver_Controls:DeepZoomBehavior />
            </i:Interaction.Behaviors>
        </MultiScaleImage>
        <Button
            x:Name="_home"
            HorizontalAlignment="Right"
            VerticalAlignment="Top"
            Width="53"
            Content="Home">
            <i:Interaction.Triggers>
                <i:EventTrigger
                    EventName="Click">
                    <TheOliver_Controls:DeepZoomNavigateHomeBehavior
                        TargetName="_msi" />
                </i:EventTrigger>
            </i:Interaction.Triggers>
        </Button>
        <Button
            x:Name="_shuffle"
            HorizontalAlignment="Right"
            VerticalAlignment="Top"
            Width="53"
            Content="Shuffle"
            Margin="0,0,57,0">
            <i:Interaction.Triggers>
                <i:EventTrigger
                    EventName="Click">
                    <TheOliver_Controls:DeepZoomRandomImageArrangeBehavior
                        TargetName="_msi"
                        XOffset="1"
                        YOffset="1" />
                </i:EventTrigger>
            </i:Interaction.Triggers>
        </Button>
        <Button
            x:Name="_slideShow"
            HorizontalAlignment="Right"
            VerticalAlignment="Top"
            Width="68"
            Content="Slideshow"
            Margin="0,0,114,0">
            <i:Interaction.Triggers>
                <i:EventTrigger
                    EventName="Click">
                    <TheOliver_Controls:DeepZoomSlideShowBehavior
                        TargetName="_msi" />
                </i:EventTrigger>
            </i:Interaction.Triggers>
        </Button>
    </Grid>
</UserControl>

 

Sourcecode

// Copyright © Microsoft Corporation.  All Rights Reserved.
// This code released under the terms of the
// Microsoft Public License (MS-PL, http://opensource.org/licenses/ms-pl.html.)

using System.Windows;
using System.Windows.Controls;
using System.Windows.Interactivity;

namespace TheOliver.Controls
{
    public class DeepZoomSlideShowBehavior : TargetedTriggerAction<MultiScaleImage>
    {
        private MultiScaleImage _msi;
        private int _count = 0;
        private int _totalImages;

        protected override void Invoke(object o)
        {
            if (this._msi == null)
            {
                this._msi = this.Target;
                _totalImages = _msi.SubImages.Count;
            }

            if (_count < _totalImages)
            {
                ZoomOnImage(_count);
            }
            else
            {
                _count = 0;
                ZoomOnImage(_count);
            }
        }

        private void ZoomOnImage(int subImageIndex)
        {
            _count++;

            MultiScaleSubImage subImage = _msi.SubImages[subImageIndex];

            double scaleBy = 1 / subImage.ViewportWidth;

            Rect subImageRect =
                new Rect(-subImage.ViewportOrigin.X * scaleBy,
                    -subImage.ViewportOrigin.Y * scaleBy,
                    scaleBy,
                    (1 / subImage.AspectRatio) * scaleBy);

            if ((this._msi.Width / this._msi.Height) > subImage.AspectRatio)
            {
                double targetViewportWidth = subImageRect.Height * this._msi.AspectRatio;
                double targetPointX = (targetViewportWidth - subImageRect.Width) / 2;

                this._msi.ViewportOrigin = new Point(subImageRect.X - targetPointX, subImageRect.Y);
                this._msi.ViewportWidth = targetViewportWidth;
            }
            else
            {
                this._msi.ViewportWidth = subImageRect.Width;
                this._msi.ViewportOrigin = new Point(subImageRect.X, subImageRect.Y);
            }
        }
    }
}

 

Solutiondownload

Daily Demo: Silverlight Deep Zoom Randomizing Images

March 24th, 2010 The-Oliver No comments

Deep Zooms in Silverlight are great. On key feature is, that you have access to every sub image. So … why don’t we use this with animations?

image

Live Preview

XAML-Code

<UserControl
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d"
    xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"
    xmlns:TheOliver_Controls="clr-namespace:TheOliver.Controls"
    x:Class="DeepZoomMouseBehavior.MainPage"
    d:DesignHeight="300"
    d:DesignWidth="400">

    <Grid
        x:Name="LayoutRoot"
        Background="White">
        <TextBlock
            Text="Deep Zoom Sample" />
        <MultiScaleImage
            x:Name="_msi"
            Source="Images/dzc_output.xml"
            Margin="0,19,0,0">
            <i:Interaction.Behaviors>
                <TheOliver_Controls:DeepZoomBehavior />
            </i:Interaction.Behaviors>
        </MultiScaleImage>
        <Button
            x:Name="_home"
            HorizontalAlignment="Right"
            VerticalAlignment="Top"
            Width="53"
            Content="Home">
            <i:Interaction.Triggers>
                <i:EventTrigger
                    EventName="Click">
                    <TheOliver_Controls:DeepZoomNavigateHomeBehavior
                        TargetName="_msi" />
                </i:EventTrigger>
            </i:Interaction.Triggers>
        </Button>
        <Button
            x:Name="_shuffle"
            HorizontalAlignment="Right"
            VerticalAlignment="Top"
            Width="53"
            Content="Shuffle"
            Margin="0,0,57,0">
            <i:Interaction.Triggers>
                <i:EventTrigger
                    EventName="Click">
                    <TheOliver_Controls:DeepZoomRandomImageArrangeBehavior
                        TargetName="_msi"
                        XOffset="1"
                        YOffset="1" />
                </i:EventTrigger>
            </i:Interaction.Triggers>
        </Button>
    </Grid>
</UserControl>

Sourcecode

// Copyright © Microsoft Corporation.  All Rights Reserved.
// This code released under the terms of the
// Microsoft Public License (MS-PL, http://opensource.org/licenses/ms-pl.html.)

using System;
using System.Collections.Generic;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Interactivity;
using System.Windows.Media.Animation;

namespace TheOliver.Controls
{
    public class DeepZoomRandomImageArrangeBehavior : TargetedTriggerAction<MultiScaleImage>
    {
        private List<MultiScaleSubImage> _randomList = new List<MultiScaleSubImage>();

        int _totalColumns = 0;
        int _totalRows = 0;

        private MultiScaleImage _msi;

        public double XOffset
        {
            get { return (double)GetValue(XOffsetProperty); }
            set { SetValue(XOffsetProperty, value); }
        }

        public static readonly DependencyProperty XOffsetProperty =
            DependencyProperty.Register(
                "XOffset", typeof(double),
                typeof(DeepZoomRandomImageArrangeBehavior),
                new PropertyMetadata(1.25, XOffsetChanged));

        private static void XOffsetChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
        {

        }

        public double YOffset
        {
            get { return (double)GetValue(YOffsetProperty); }
            set { SetValue(YOffsetProperty, value); }
        }

        public static readonly DependencyProperty YOffsetProperty =
            DependencyProperty.Register(
                "YOffset",
                typeof(double),
                typeof(DeepZoomRandomImageArrangeBehavior),
                new PropertyMetadata(1.25, YOffsetChanged));

        private static void YOffsetChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
        {

        }

        public int Speed
        {
            get { return (int)GetValue(SpeedProperty); }
            set { SetValue(SpeedProperty, value); }
        }

        public static readonly DependencyProperty SpeedProperty =
            DependencyProperty.Register(
                "Speed",
                typeof(int),
                typeof(DeepZoomRandomImageArrangeBehavior),
                new PropertyMetadata(1000, SpeedChanged));

        private static void SpeedChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
        {

        }

        protected override void Invoke(object o)
        {
            _msi = this.Target;
            ArrangeIntoGrid();
        }

        private void ArrangeIntoGrid()
        {
            _randomList = RandomizedListOfImages();

            int totalImagesAdded = 0;
            double totalWidth = 0;
            double xoffset = XOffset;
            double yoffset = YOffset;
            double margin = .1;

            if (_randomList.Count > 1)
            {
                int numberOfImages = _randomList.Count;
                _totalColumns = 0;
                _totalColumns = (int)Math.Ceiling(Math.Sqrt(numberOfImages));
                _totalRows = numberOfImages / (_totalColumns - 1);
                totalWidth = _totalColumns * xoffset;

                Storyboard moveStoryboard = new Storyboard();

                for (int row = 0; row < _totalRows; row++)
                {
                    for (int col = 0; col < _totalColumns; col++)
                    {
                        if (numberOfImages != totalImagesAdded)
                        {
                            MultiScaleSubImage currentImage = _randomList[totalImagesAdded];
                            currentImage.ViewportWidth = 1;

                            Point currentPosition = new Point(0, 0);
                            Point futurePosition = new Point(-xoffset * col, -yoffset * row);

                            // Create Animation
                            PointAnimationUsingKeyFrames moveAnimation = new PointAnimationUsingKeyFrames();

                            // Create Keyframe
                            SplinePointKeyFrame startKeyframe = new SplinePointKeyFrame();
                            startKeyframe.Value = currentPosition;
                            startKeyframe.KeyTime = KeyTime.FromTimeSpan(TimeSpan.Zero);

                            startKeyframe = new SplinePointKeyFrame();
                            startKeyframe.Value = futurePosition;
                            startKeyframe.KeyTime = KeyTime.FromTimeSpan(TimeSpan.FromMilliseconds(Speed));

                            KeySpline ks = new KeySpline();
                            ks.ControlPoint1 = new Point(0, 1);
                            ks.ControlPoint2 = new Point(1, 1);
                            startKeyframe.KeySpline = ks;
                            moveAnimation.KeyFrames.Add(startKeyframe);

                            Storyboard.SetTarget(moveAnimation, currentImage);

                            Storyboard.SetTargetProperty(moveAnimation, new PropertyPath("ViewportOrigin"));

                            moveStoryboard.Children.Add(moveAnimation);

                            totalImagesAdded++;
                        }
                        else
                        {
                            break;
                        }
                    }
                }

                if (!_msi.Resources.Contains("myAnim"))
                {
                    _msi.Resources.Add("myAnim", moveStoryboard);
                }

                this._msi.ViewportOrigin = new Point(-margin, -margin);
                this._msi.ViewportWidth = totalWidth + margin;

                // Play Storyboard
                moveStoryboard.Begin();
            }
            else
            {
                MultiScaleSubImage currentImage = _randomList[0];
                currentImage.ViewportWidth = 1 + 2 * margin;
                currentImage.ViewportOrigin = new Point(0, 0);
                this._msi.ViewportOrigin = new Point(-margin, -margin);
                this._msi.ViewportWidth = 1;
            }
        }

        private List<MultiScaleSubImage> RandomizedListOfImages()
        {
            List<MultiScaleSubImage> imageList = new List<MultiScaleSubImage>();
            Random ranNum = new Random();

            // Store List of Images
            foreach (MultiScaleSubImage subImage in _msi.SubImages)
            {
                subImage.Opacity = 1;
                imageList.Add(subImage);
            }

            int numImages = imageList.Count;

            // Randomize Image List
            for (int a = 0; a < numImages; a++)
            {
                MultiScaleSubImage tempImage = imageList[a];
                imageList.RemoveAt(a);

                int ranNumSelect = ranNum.Next(imageList.Count);

                imageList.Insert(ranNumSelect, tempImage);
            }

            return imageList;
        }
    }
}

 

Solutiondownload

Daily Demo: Deep Zoom Navigate Home Behavior

March 23rd, 2010 The-Oliver No comments

A common used feature in Deep Zoom Images is the “Home” Feature. If you zoom deep into an image you might get lost ;-) . But don’t be afraid. The following behavior applied to you MultiScaleImage bring you back to the origin position (Home) of your image.

 

image

Livepreview

 

XAML-Code

<UserControl
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d"
    xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"
    xmlns:TheOliver_Controls="clr-namespace:TheOliver.Controls"
    x:Class="DeepZoomMouseBehavior.MainPage"
    d:DesignHeight="300"
    d:DesignWidth="400">

    <Grid
        x:Name="LayoutRoot"
        Background="White">
        <TextBlock
            Text="Deep Zoom Sample" />
        <MultiScaleImage
            x:Name="_msi"
            Source="Images/dzc_output.xml"
            Margin="0,19,0,0">
            <i:Interaction.Behaviors>
                <TheOliver_Controls:DeepZoomBehavior />
            </i:Interaction.Behaviors>
        </MultiScaleImage>
        <Button
            HorizontalAlignment="Right"
            VerticalAlignment="Top"
            Width="53"
            Content="Home">
            <i:Interaction.Triggers>
                <i:EventTrigger
                    EventName="Click">
                    <TheOliver_Controls:DeepZoomNavigateHomeBehavior
                        TargetName="_msi" />
                </i:EventTrigger>
            </i:Interaction.Triggers>
        </Button>
    </Grid>
</UserControl>

 

Sourcecode for Behavior

// Copyright © Microsoft Corporation.  All Rights Reserved.
// This code released under the terms of the
// Microsoft Public License (MS-PL, http://opensource.org/licenses/ms-pl.html.)

using System.Windows.Interactivity;
using System.Windows;
using System.Windows.Controls;

namespace TheOliver.Controls
{
    public class DeepZoomNavigateHomeBehavior : TargetedTriggerAction<MultiScaleImage>
    {
        MultiScaleImage msi;

        protected override void Invoke(object parameter)
        {
            msi = this.Target as MultiScaleImage;

            msi.ViewportWidth = 1;
            msi.ViewportOrigin = new Point(0, 0);
        }
    }
}

 

 

Solutiondownload

Daily Demo: Deep Zoom Mouse Zoom Features

March 22nd, 2010 The-Oliver No comments

Deep Zoom is brilliant, awesome, super exciting … I LOVE DEEP ZOOM. And I love to create my own applications based on Deep Zoom. In Silverlight you can use Deep Zoom with the MultiScaleImage-Control. The challenge is, it doesn’t bring support for navigation in a deep zoom image. So you have to do it by yourself … or better use a Behavior for this features.

image

Live Preview

 

XAML-Code

<UserControl
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d"
    xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"
    xmlns:TheOliver_Controls="clr-namespace:TheOliver.Controls"
    x:Class="DeepZoomMouseBehavior.MainPage"
    d:DesignHeight="300"
    d:DesignWidth="400">

    <Grid
        x:Name="LayoutRoot"
        Background="White">
        <TextBlock
            Text="Deep Zoom Sample" />
        <MultiScaleImage
            x:Name="_msi"
            Source="Images/dzc_output.xml"
            Margin="0,12,0,0">
            <i:Interaction.Behaviors>
                <TheOliver_Controls:DeepZoomBehavior />
            </i:Interaction.Behaviors>
        </MultiScaleImage>
    </Grid>
</UserControl>

Sourcecode

// Copyright © Microsoft Corporation.  All Rights Reserved.
// This code released under the terms of the
// Microsoft Public License (MS-PL, http://opensource.org/licenses/ms-pl.html.)

using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
using System.Windows.Interactivity;

namespace TheOliver.Controls
{
    public class DeepZoomBehavior : Behavior<MultiScaleImage>
    {
        MultiScaleImage _msi;
        Point _lastMousePos = new Point();
        double _zoom = 1;
        bool _mouseButtonPressed = false;
        bool _mouseIsDragging = false;
        Point _dragOffset;
        Point _currentPosition;

        private double ZoomFactor
        {
            get { return _zoom; }
            set { _zoom = value; }
        }

        protected override void OnAttached()
        {
            _msi = this.AssociatedObject;

            _msi.MouseMove += delegate(object sender, MouseEventArgs e)
            {
                if (_mouseButtonPressed)
                {
                    _mouseIsDragging = true;
                }
                _lastMousePos = e.GetPosition(_msi);
            };

            _msi.MouseLeftButtonDown += delegate(object sender, MouseButtonEventArgs e)
            {
                _mouseButtonPressed = true;
                _mouseIsDragging = false;
                _dragOffset = e.GetPosition(_msi);
                _currentPosition = _msi.ViewportOrigin;
            };

            _msi.MouseLeave += delegate(object sender, MouseEventArgs e)
            {
                _mouseIsDragging = false;
            };

            _msi.MouseLeftButtonUp += delegate(object sender, MouseButtonEventArgs e)
            {
                _mouseButtonPressed = false;
                if (_mouseIsDragging == false)
                {
                    bool shiftDown = (Keyboard.Modifiers & ModifierKeys.Shift) == ModifierKeys.Shift;

                    ZoomFactor = 2.0;
                    if (shiftDown) ZoomFactor = 0.5;
                    Zoom(ZoomFactor, _lastMousePos);
                }
                _mouseIsDragging = false;
            };

            _msi.MouseMove += delegate(object sender, MouseEventArgs e)
            {
                if (_mouseIsDragging)
                {
                    Point newOrigin = new Point();
                    newOrigin.X = _currentPosition.X - (((e.GetPosition(_msi).X - _dragOffset.X) / _msi.ActualWidth) * _msi.ViewportWidth);
                    newOrigin.Y = _currentPosition.Y - (((e.GetPosition(_msi).Y - _dragOffset.Y) / _msi.ActualHeight) * _msi.ViewportWidth);
                    _msi.ViewportOrigin = newOrigin;
                }
            };

            _msi.MouseWheel += (s,e) =>
                {
                e.Handled = true;
                if (e.Delta > 0)
                {
                    ZoomFactor = 1.2;
                }
                else
                {
                    ZoomFactor = .80;
                }

                Zoom(ZoomFactor, _lastMousePos);
            };
        }

        public void Zoom(double zoom, Point pointToZoom)
        {
            Point logicalPoint = _msi.ElementToLogicalPoint(pointToZoom);
            _msi.ZoomAboutLogicalPoint(zoom, logicalPoint.X, logicalPoint.Y);
        }

    }
}

 

Solutiondownload

Ein 26-Gigabyte großes Digitalbild von Paris

March 18th, 2010 The-Oliver No comments

Auf www.paris-26-gigapixels.com befindet sich das derzeit angeblich größte Digitalfoto. Aus 2346 Bilden wurde die Skyline von Paris zusammengesetzt.

image

Schon sehr beeindruckend. Allerdings frage ich mich warum man sich so einen riesigen Aufwand mit dem Zusammensetzen der Bilder macht, aber null Aufwand für einen gescheiten Player, der das Bild ordentlich darstellt.

Die Navigation ist sehr gewöhnungsbedürftig, übliche Verfahren wie Doppelklicks oder Mausrad funktionieren nicht. Entgegen allen üblichen Navigationen wandert man nach rechts in dem man die Maus nach links bewegt. Darüber hinaus explodiert quasi Speicherverbrauch der Webseite.

Wer so etwas auf einfache Art und Weise selber machen möchte, ohne wirklich selber viel Aufwand zu haben, kriegt dazu von Microsoft kostenlose Werkzeuge an die Hand gelegt.

Mit der Windows Live Fotogallerie gibt es eine sehr gute Bilderverarbeitung die für jeden Hobby- und semiprofessionellen Fotografen ausreicht. Die Fotogallerie hat eine tolle Funktion zum automatischen Zusammensetzen von vielen Bildern, die allerdings gewisse Überschneidungen haben müssen.

Hat man dann ein sehr großes Bild, dann kann man dieses mit dem Deep Zoom Composer so vorbereiten, das es sehr schnell von jedem Browser geladen werden kann. Diese Technik basiert auf Silverlight.

Die Tools sind kostenlos und gibt es hier:

Windows Live Fotogallerie

Deep Zoom Composer

Ein weiteres Tool das etwas technischer ist: Microsoft Research Image Composite Editor

Categories: Deep Zoom, Designer, Deutsch, Web Tags:

Mix: Keynote

March 15th, 2010 The-Oliver 1 comment

Sitze gerade in der Keynote der MIX10 in Las Vegas.

09:07 Video von Bing Maps Future Video mit Streetside, Argumented Reality. www.discoverbingmaps.com

09:10 Es geht los. Scott Guthrie betritt die Stage.

09:11 Silverlight. Silverlight hat heute 60 % Verbreitung weltweit. Und ist damit das sich am schnellsten verbreitende Browserplugin.

12 Millionen Stunden Live Übertragung bei den Olympischen Spielen in Vancouver 2010. IIS Smooth Streaming + Silverlight.

Der Player ist jetzt Open Source unter http://smf.codeplex.com

Silverlight erlaubt es jetzt in Umgebungen mit mehreren Monitoren auf einem Monitor Fullscreen HD darzustellen, während auf anderen Monitoren andere Anwendungen aktiv sind.

09:18 Live Labs Pivot wird präsentiert. Deep Zoom zum Pivotieren von extrem großen Bilddaten (www.kiva.org, AP, Football-League). www.getpivot.com

image

9:21 Expression Blend 4 wird angekündigt. Jeder Besitzer von Expression Blend 3 bekommt ein kostenloses Update.

Ebay und Cynergy präsentieren ihre Silverlight Lösung zum Einstellen neuer Artikel zum Verkaufen. Integration von Out-Of-Browser-Experience, Webcamsupport zum Scannen von Barcodes auf Produkten. Coole UI. Auf Open Ebay kann jetzt jeder Entwickler spezialisierte Ebay-Anwendungen in Silverlight 4 entwickeln.

Demonstration wie diese Lösung mit SketchFlow zusammen mit Ebay und Cynergy designt und entwickelt wurde.

9:33 Scott Guthrie: Silverlight 4 RC ist ab sofort verfügbar

9:34 Windows Phone

Joe Belfiore, Corporate Vice President Wndows Phone. Die erste Thirdparty Lösung wird präsentiert: Associated Press.

Cool. Windows Phone kann die Darstellung auf dem Bildschirm auch nach außern liefern, so das man prima Demos auf den Beamer bringen kann.

Start, Search, Back – Die einzigen Buttons auf einem Windows Phone.

Sehr coole Demos, die zeigen, die sehr genial miteinander kombinierbar sind. Facebook, Windows Live, Photos. Sehr cool. Alles in Silverlight gebaut.

Jetzt kommt ein 3D Game in XNA entwickelt: Harvest. Genial. Ein echtes XBOX-Live Game. Echtes 3D.

10:01 Scott Guthrie ist wieder auf der Bühne.

Silverlight auf Windows Phone. Same Programming Model. Same Silverlight. Same Tools.

Scott macht selber eine Live Demo. Ist halt immer noch ein Entwickler Wink Visual Studio ist die Entwicklungsumgebung für Windows Phone. Alle Features die man kennt, funktionieren auch für Windows Phone Entwicklung. Design Preview, Intellisense, Debugging, Emulator (Virtual PC). “It just works”. Orientation Testing.

Scott baut live der ersten Windows Phone Twitter Client. Mit WebClient-Klasse einfach auf den Feed zugreifen … Fertig.

10:12 Jon Harris zeigt Photo Apps auf dem Windows Phone und wie diese mit Expression Blend for Windows Phone erstellt werden können.

10:22 Scott is back.

Die Tools für die Entwicklung von Windows Phone:

  • Expression Blend for Windows Phone
  • Visual Studio 2010 Express for Windows Phone

KOSTENLOS

Download: http://developer.windowsphone.com

Noch Fragen???

Jetzt ein paar Beispiele von Partnern:

  • Netflix – Playready DRM
    Videos ausleihen aufs Handy. Genial.
  • Graphic.Ly – Mike Swanson
    Comic Viewer, inklusive Hardware Accelerated Deep Zoom.
  • FourSquare – Laura Foy

10:36 Scott introducing Shazam – Jeff Sandquist

Lieder erkennen mit dem Windows Phone. Shazam erkennt Lieder. Integration mit dem Zune Marketplace.

Major League Soccer – Charlie Kindel stellt vor, wie man mit dem Windows Phone Daten über Fussball (nicht American Football) visualieren kann.

Marionette – Einen Avatar Tool. Scott läßt Steve Ballmer “Phone Developers” singen …

10:45 Seesmic – Loic Le Meur´

Eine coole Silverlight Anwendung für den Desktop (Windows und Mac). Und jetzt auch auf Windows Phone. Sehr cool. http://platform.seesmic.com

10:51 Coding4Fun mit dem Windows Phone – Cannon.

Eine Remote Kanonensteuerung jetzt wird auf das Publikum geschossen. Schnell weg hier Smile Rote Polo Shirts werden ins Publikum geschossen.

10:57 XNA Gaming auf dem Windows Phone und in der Cloud – Battle Punks und Harvest

Die 3-Screen-Experience = Ein Spiel auf drei Plattformen = Windows Phone 7 + XBOX 360 + PC. Live Demo … sehr cool. Alles mit dem XNA Studio 4.0. Genial.

11:02 Marketplace – Wie können Entwickler Geld verdienen? Ganz einfach über den Marketplace für Windows Phone.

Sehr cool, das Try & Buy Feature. Anwendungen erst mal testen bevor man die Katze im Sack kauft. Für den Consumer super, für den Entwickler eine Zeile Code.

Okay … das wars.

Windows Phone 7 = Silveright + XNA + Kostenloses Blend for Windows Phone + Kostenloses Visual Studio for Windows Phone