Ik heb een hele tijd terug een vectorgebaseerde layouteditor gemaakt in c#. Nu wil ik voor een ander project deze hergebruiken voor op een webpagina. De class library van de layout editor was al enigzins voorbereid op een andere methode van tekenen naar het scherm dus hiero geen enkel probleem.
Probleem is Silverlight. System.Drawing word niet ondersteund en je kunt niet aan de pixel data van afbeeldingen komen. Aangezien het standaard image component enkel JPEG en PNG afbeeldingen ondersteund kun je ook niet zomaar een bitmap in een stream vasthouden en die steeds refreshen.
Ik ben hier omheen gegaan door de view van de edior op te delen in tiles. Elke tile is een PNG image stream zonder compressie en alle tekenoperaties tekenen rechtstreeks in de imagechuncks van de png. Vervolgens maak ik een grid met daarin image componenten. De images worden dan vanuit de png stream van de tile geladen. Gecombineerd met fatsoenlijke clipping werkt het beter dan ik initieel gedacht had maar kost het toch redelijk wat processor kracht. De bottleneck zit vooral in het toekennen van de gewijzigde stream aan het image component. Nu kan ik wel multithreaded gaan werken om de ervaring voor de gebruiker soepeler te maken maar mensen met een athlon 1000 ofzo zullen er ook dan geen prettige ervaring op nahouden. (op een @6600 draait het als een trein)
Men vraag is of iemand tips heeft in een andere richting om images te bewerken in silverlight. Of misschien wel een geheel andere aanpak.
Probleem is Silverlight. System.Drawing word niet ondersteund en je kunt niet aan de pixel data van afbeeldingen komen. Aangezien het standaard image component enkel JPEG en PNG afbeeldingen ondersteund kun je ook niet zomaar een bitmap in een stream vasthouden en die steeds refreshen.
Ik ben hier omheen gegaan door de view van de edior op te delen in tiles. Elke tile is een PNG image stream zonder compressie en alle tekenoperaties tekenen rechtstreeks in de imagechuncks van de png. Vervolgens maak ik een grid met daarin image componenten. De images worden dan vanuit de png stream van de tile geladen. Gecombineerd met fatsoenlijke clipping werkt het beter dan ik initieel gedacht had maar kost het toch redelijk wat processor kracht. De bottleneck zit vooral in het toekennen van de gewijzigde stream aan het image component. Nu kan ik wel multithreaded gaan werken om de ervaring voor de gebruiker soepeler te maken maar mensen met een athlon 1000 ofzo zullen er ook dan geen prettige ervaring op nahouden. (op een @6600 draait het als een trein)
Men vraag is of iemand tips heeft in een andere richting om images te bewerken in silverlight. Of misschien wel een geheel andere aanpak.