Thema: 

Live-Tile per Code erstellen

Diskutiere Live-Tile per Code erstellen im Windows Phone 7 Entwicklung Forum im Bereich Windows Phone 7 Allgemein; Hey Developers, hat sich jemand von euch schon einmal damit auseinander gesetzt ein Tile per Code auf dem Phone selber

  1. #1

    Live-Tile per Code erstellen

    Hey Developers,

    hat sich jemand von euch schon einmal damit auseinander gesetzt ein Tile per Code auf dem Phone selber zu erstellen. Gerade mit der Möglichkeit in Mango ohne Push zu updaten wird das doch interessant.

    Da die möglichkeiten der Bildbearbeitung auf dem Phonje ja leider sehr begranzt sind, wollte ich fragen, ob jemand von euch schon einmal solch ein Bild per code erstellt hat.
    Ich bräuchte lediglich ein 173x173 großes PNG mit nem Bildchen links und ner Zahl rechts.

    Das muss doch gehen, oder?

  2. #2

    AW: Live-Tile per Code erstellen

    gemacht noch nicht, aber du wirst wohl ImageBrush oder ähnliches verwenden.

  3. #3

    AW: Live-Tile per Code erstellen

    Ich habe mir jetzt das API noch nicht angesehen mit dem sich die Live-Tiles setzen lassen, schätze aber, dass du eine ImageSource brauchst. Man nimmt also eine WritableBitmap und rendert in diese UIElemente hinein.

    Code:
    protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e) {
          base.OnNavigatedTo(e);
    
          TextBlock txb = new TextBlock();
          txb.Text = "Hello there";
          txb.Foreground = new SolidColorBrush(Colors.Green);
    
          Rectangle rect = new Rectangle();
          rect.Height = 150;
          rect.Width = 150;
          rect.Fill = new SolidColorBrush(Colors.White);
    
          System.Windows.Media.Imaging.WriteableBitmap bmp = new System.Windows.Media.Imaging.WriteableBitmap(173, 173);
          Transform trans = new TranslateTransform();
          bmp.Render(rect, trans);
          bmp.Render(txb, trans);
    
          bmp.Invalidate();
    
          ImageBrush brush = new ImageBrush();
          brush.ImageSource = bmp;
          rectangle1.Fill = brush;
        }
    Die Methode hier erstellt auf diese Weise ein Bild mit 173x173, erstellt ein weißes Rechteck 150x150 darin und schreibt noch Text hinein. Das ganze hab ich in meiner Demo-App dann als Bild in ein Rectangle gemalt um es mal anzusehen. Hoffe das hilft dir weiter.

  4. Die folgenden Benutzer danken StevieBallz für diesen wertvollen Beitrag:

    yjeanrenaud (15.06.2011)

  5. #4

    AW: Live-Tile per Code erstellen

    Hey super, ich denke damit komme ich erstmal ein gutes Stück weiter. Ich muss dem Tile aber zwangsläufig eine URI übergeben. Weißt du auch, wie ich den ImageBrush dann jetzt als Datei (PNG) speichere?
    Vielen Dank schon einmal!


  6. #5

    AW: Live-Tile per Code erstellen

    Wenn dann speicherst du nicht den Brush sondern das WritableBitmap.

    Hab das jetzt nur mal gegooglet, siehe hier für das Ergebnis: da werden einfach die Rohdaten weggespeichert als BMP. Gibt aber scheinbar Helper-Klassen, die schon Leute geschrieben haben - lies es dir einfach mal durch, hoffe es hilft:

    http://stackoverflow.com/questions/3...-local-storage

  7. Die folgenden Benutzer danken StevieBallz für diesen wertvollen Beitrag:

    yjeanrenaud (15.06.2011)

  8. #6

    AW: Live-Tile per Code erstellen

    Ja, soweit war ich schon, nur wie kann ich es jetzt meinem Live Tile als Background übergeben? Das will nämlich zwangsläufig eine URI dafür haben -.-
    Geht das überhaupt?

  9. #7

    AW: Live-Tile per Code erstellen

    Hmm... verzwickte Situation, ich hab gerade nachgelesen im Dev-Forum von Microsoft wo wer dasselbe Problem hat. Scheinbar geht es nicht, dass man eine URI auf ein File im IsolatedStorage mitgibt. Damit hilft dann auch das Zeichnen des Bitmaps einem nicht weiter

    Hier wäre der entsprechender Link zur Quelle: http://forums.create.msdn.com/forums...77/508962.aspx

  10. #8

    AW: Live-Tile per Code erstellen

    doch, das geht:
    http://mark.mymonster.nl/2010/12/19/...ltileschedule/
    du musst nur diese SentTile-Funktion und die angepasste Update-Funktion nehmen, die im Grunde nichts anderes tut, als einen HTTP-Channel zu öffnen und das Tile xml-Konform zu übermitteln. dirty but working

  11. Die folgenden Benutzer danken yjeanrenaud für diesen wertvollen Beitrag:

    StevieBallz (16.06.2011)

  12. #9

    AW: Live-Tile per Code erstellen

    Ok, wenn ich das richtig verstehe funktioniert das also so, dass ich zuerst hergehe und mich für Tile-Notifications registriere. Dann ein XML bastle in das ich die Rohdaten des Bildes reinschreibe (als BMP weil PNG encoden kann ich es ja nicht wirklich). Jetzt schicke ich das XML an Microsofts Notification-Server der mir dann die Tile updated und dann deregistriere ich mich wieder *brrr* Das is mehr als dirty

    Also das Design dieses APIs haben die Jungs bei Microsoft echt verbockt

  13. #10

    AW: Live-Tile per Code erstellen

    Mh, das gefällt mir eigentlich garnicht, aber wenns der einige Weg ist...
    Ich dachte eigentlich ich könnte jetzt mit Mango auf den Umweg über Push verzichten...
    Ich nehme nacher nochmal Kontakt zu nem Developer bei MS auf, ich kenn da wen.

    Danke trotzdem erstmal für deine Mühe, wenns nen schöneren Weg gibt, werde ich berichten.

  14. #11

    AW: Live-Tile per Code erstellen

    Es bringt auch nichts - hätte mich jetzt dran gesetzt den ganzen Hack in eine einzelne Methode zu verpacken und bin draufgekommen, dass der Link bzgl. Push-Service auch letzten Endes nur die URI setzen kann - sprich das Telefon holt sich das Bild immer von einer URI und ist dabei auf 80 kb beschränkt.

    Was du natürlich machen kannst, ist dass du das Bild an sich identisch belässt oder halt eine gewisse (beschränkte Anzahl an Bildern hast) und dann über das Count Property der StandardTileData eben die anzuzeigende Zahl mitgibst.

    Sonst bliebe soweit ich das aktuell sehe nur das Bild extern zu generieren und die URI dorthin dann mitzugeben.

  15. #12

    AW: Live-Tile per Code erstellen

    hmpf, natürlich, man kann das bild ja auch ganz einfach per php generieren:
    PHP-Code:
    <?
    $img 
    imagecreatetruecolor(173,173); 
    $schriftfarbe imagecolorallocate($img,0,103,0);
    $hintergrund imagecolorallocate($img,239,239,239);
    imagefill($img,0,0,$hintergrund); 
    imagestring($img320$_GET['str'], $schriftfarbe); 
    header("Content-type: image/png");
    imagepng($img); 
    imagedestroy($img); 
    ?>
    damit bekommst du ein png. kannst sogar einfach die uri benutzen, um den string anzugeben, indem du beispiel.php?str=bla aufrufst. kannst auch noch viel mehr paramter übergeben

  16. Die folgenden Benutzer danken yjeanrenaud für diesen wertvollen Beitrag:

    StevieBallz (16.06.2011)

  17. #13

    AW: Live-Tile per Code erstellen

    Soweit is es mir schon klar - die Sache ist ja die, dass man ja jetzt mit Mango die Tiles ändern kann ohne einen Server dafür zu brauchen (und eine Datenverbindung). Für Bilder brauche ich aber einen und das ist ja was wir vermeiden wollten und ich find das eben leider etwas schwach, dass es da so überhaupt keine Möglichkeit gibt.

    Na ja, evtl. im nächsten großen Update

  18. #14

    AW: Live-Tile per Code erstellen

    Mango ist ja noch nicht 100% fertig

  19. #15

    AW: Live-Tile per Code erstellen

    Ja, ich hab mein Leid mal im UserVoice geklagt und BrandonWatson angetweetet - evtl. bringts ja was.

  20. Die folgenden Benutzer danken StevieBallz für diesen wertvollen Beitrag:

    yjeanrenaud (16.06.2011)

  21. #16

    AW: Live-Tile per Code erstellen

    Ich hab gerade herausgefunden, dass mal mit einer URI auch in den Isolated Storage verweisen kann.
    Code:
    Uri("isostore:/" + filePath, UriKind.Absolute);
    Mann muss halt isostore: davor schreiben.
    Mal sehen, was sich damit basteln lässt.

  22. Die folgenden Benutzer danken Robby Light für diesen Beitrag: 2

    StevieBallz (20.06.2011), yjeanrenaud (20.06.2011)

  23. #17

    AW: Live-Tile per Code erstellen

    Wenn das funktioniert ist der Rest kein Problem. Du renderst in die WritableBitmap, speicherst die als JPEG in den IsolatedStorage (da gibts unter System.Windows.Media irgendwo nen Encoder (oder wars Microsoft.Media - irgendwas mit Media jedenfalls) und gibst die URI dann mit und gilt.

    Sehr schön

  24. #18

    AW: Live-Tile per Code erstellen

    Mh, es scheint als ginge das auch nicht so ganz. Ich habe jetzt ein Bild erstellt, das ich gerne als LiveTile Hintergrund verwenden möchte und dies in den IsolatedStorage gelegt.

    Meine Uri, die ich dem Tile übergebe zeit jetzt auch auf das Bild, nur das Tile scheint es nicht zu mögen und gibt mir diese seltsame NotSupportedException:
    Live-Tile per Code erstellen-screenshot.png

    Der Code in dem ich das Bild erstelle und übergebe dürfte korrekt sein, ich gebe ihn euch aber trotzdem mal mit auf den Weg:

    Code:
    private Uri createTileBackground(myDate md)
            {
                // Text
                TextBlock txb = new TextBlock();
                txb.Text = md.name;
                txb.Foreground = new SolidColorBrush(Colors.White);
                txb.FontSize = 15;
                txb.Padding = new Thickness(5, 150, 0, 0);
    
                // Date
                TextBlock txb2 = new TextBlock();
                txb2.Text = md.date.ToString("dd. MMMM yyyy");
                txb2.Foreground = new SolidColorBrush(Colors.White);
                txb2.FontSize = 20;
                txb2.Padding = new Thickness(5, 125, 0, 0);
    
                // Value
                TextBlock txb3 = new TextBlock();
                txb3.Text = md.tbDays.Text;
                txb3.Width = 173;
                txb3.TextAlignment = TextAlignment.Center;
                txb3.Foreground = new SolidColorBrush(Colors.White);
                txb3.FontSize = 60;
                txb3.Padding = new Thickness(0, 50, 0, 0);
    
                Rectangle rect = new Rectangle();
                rect.Height = 173;
                rect.Width = 173;
                rect.Fill = (SolidColorBrush)Resources["PhoneAccentBrush"];
    
                Image myImage = new Image();
                myImage.Source = new BitmapImage(new Uri("/Background.png", UriKind.RelativeOrAbsolute));
    
                System.Windows.Media.Imaging.WriteableBitmap bmp = new System.Windows.Media.Imaging.WriteableBitmap(173, 173);
                Transform trans = new TranslateTransform();
                bmp.Render(rect, trans);
                bmp.Render(myImage, trans);
                bmp.Render(txb3, trans);
                bmp.Render(txb2, trans);
                bmp.Render(txb, trans);
                bmp.Invalidate();
    
                using (var isoStore = IsolatedStorageFile.GetUserStoreForApplication()) 
                {
                    using (var isoFileStream = isoStore.CreateFile("img" + md.tileId + ".jpg")) 
                    { 
                        Extensions.SaveJpeg(bmp, isoFileStream, 173, 173, 0, 100); 
                    } 
                }
    
                return new Uri("isostore:/" + "img" + md.tileId + ".jpg", UriKind.Absolute);
            }
    Mache ich etwas falsch, oder geht es wirklich nicht?
    Es kann doch nicht sein, dass ich immer auf Push angewiesen sind. Es amcht in meinem Projekt nämlich überhaupt keinen Sinn diesen Umweg zu gehen, da alle Daten lokal vorhanden sind.

    Schaut doch bitte mal drüber, vielleicht findet ihr ja nen Dummen Fehler, den ich nicht sehe. Danke.

  25. Die folgenden Benutzer danken Robby Light für diesen Beitrag: 2

    dehoDev (30.07.2011), FourSpotProject (03.09.2011)

  26. #19

    AW: Live-Tile per Code erstellen

    Ha, ich hab's gefunden. Bzw. ein Kollege von mir hat die Lösung hier gefunden.
    Es sieht tatsächlich so aus, als müsste das Bild dann in einem ganz bestimmten Ordner im Isolated Strorage liegen.
    Dann geht's!
    Code:
    tileData.BackgroundImage = new Uri("isostore:/Shared/ShellContent/here.png", UriKind.Absolute)
    Puh, was für eine schwere Geburt...

  27. Die folgenden Benutzer danken Robby Light für diesen Beitrag: 4

    dehoDev (30.07.2011), FourSpotProject (03.09.2011), StevieBallz (25.06.2011), yjeanrenaud (24.06.2011)

Antworten
Du betrachtest Live-Tile per Code erstellen im Forum Windows Phone 7 Entwicklung im Bereich Windows Phone 7 Allgemein von PocketPC.ch.

Live-Tile per Code erstellen

Ähnliche Themen

  1. Live Tile Apps Sammlung
    Von skunk im Forum Windows Phone 7 Apps
    Antworten: 58
    Letzter Beitrag: 07.12.2011, 16:48
  2. Secondary Live Tile Updaten.
    Von Robby Light im Forum Windows Phone 7 Entwicklung
    Antworten: 12
    Letzter Beitrag: 27.11.2011, 21:39
  3. Beezz Live-Tile Probleme
    Von Robby Light im Forum Windows Phone 7 Apps
    Antworten: 14
    Letzter Beitrag: 04.07.2011, 08:38
  4. Facebook Live Tile (Ich Tile) wiederherstellen
    Von htcjoop im Forum Windows Phone 7 Allgemein
    Antworten: 2
    Letzter Beitrag: 13.04.2011, 07:06
  5. Live Tile
    Von dpbenne im Forum LG E900 Optimus 7
    Antworten: 18
    Letzter Beitrag: 10.01.2011, 14:27

Besucher haben diese Seite mit folgenden Suchbegriffen gefunden:

windows phone save png iso

tiles erstellen

windows phone 7 tiles

windows phone live tile

windows phone 7 live tile erstellen

tiles erstellen phone 7 173

livetile erstellen

live tiles selber machen

windows phone 7 tile erstellen

livetile generieren

windows phone live tile erstellen

WP7 Tile Fontsize

live tiles erstellen

live tile mango create bitmap

tile erstellen

wp7 tiles

wp7 live tile erstellen

windows phone 7 livetile

windows phone 7 entwicklung tiles

livw tiles selber erstellen

windows phone 7 tiles erstellen

windows phone 7 live tile

windows phone rechteck aus png

livetile per code erstellen

live tiles selber erstellen

Stichworte