Comment redimensionner une Image en C# WinRT/winmd?
J'ai une question simple, mais jusqu'à présent je n'ai pas trouvé de réponse: comment redimensionner une image jpeg en C# WinRT/WinMD projet et l'enregistrer en tant que nouvelle jpeg?
Je suis le développement de Windows 8 Metro application pour le téléchargement quotidien la forme d'une image de certains sites et l'afficher sur une Tuile en Direct. Le problème est que l'image doit être inférieure à 1024 x 1024 et plus petit que 200 ko, sinon il ne sera pas affiché sur la vignette:
http://msdn.microsoft.com/en-us/library/windows/apps/hh465403.aspx
Si j'ai plus d'image, comment faire pour redimensionner pour être en forme pour le Live Tile? Je pense tout simple redimensionner comme largeur/2, hauteur/2 avec garder le ratio d'aspect.
L'exigence spécifique ici est que le code doit s'exécuter en tant que Composant Windows Runtime, donc WriteableBitmapEx bibliothèque ne fonctionne pas ici - il est uniquement disponible pour les réguliers WinRT projets. Il y a même une branche pour WriteableBitmapEx comme winmd projet, mais c'est loin d'être prêt.
OriginalL'auteur Martin Suchan | 2012-09-10
Vous devez vous connecter pour publier un commentaire.
Exemple de la façon dont, à l'échelle et des cultures prises de ici:
Je n'ai aucune idée
aucune idée sur les performances?
oui, je n'ai aucune idée sur les performances.
merci monsieur !!! possible pour vous de regarder dans mes autres questions et de l'aide?
OriginalL'auteur mydogisbox
Plus simple de code pour re-taille de l'image, pas de culture. Le code ci-dessous re-taille de l'image 80x80
Source
L'utilisation de ce j'obtiens très mauvaise qualité de l'image sur le carreau... des suggestions?
Si vous obtenez une mauvaise qualité d'image à partir de ce code, essayez
transform.InterpolationMode = BitmapInterpolationMode.Fant
OriginalL'auteur Xyroid
Voici donc ma solution, je suis venu avec après beaucoup de recherches sur google et essai/erreur de codage:
Le but ici était de savoir, comment manipuler des images dans WinRT, plus précisément dans Tâches En Arrière-Plan. Tâches en arrière-plan sont encore plus limitées que d'ordinaire WinRT projets, parce qu'ils doivent être de type Composant Windows Runtime. 99% de bibliothèques disponibles sur NuGet ciblage WinRT sont de cibler uniquement la valeur par défaut WinRT projets, ils ne peuvent donc pas être utilisés dans Windows Composant d'Exécution des projets.
J'ai d'abord essayé d'utiliser le bien connu WriteableBitmapEx bibliothèque de portage le code nécessaire à mon winmd projet. Il en est de même direction générale de la WBE projet de ciblage winmd, mais elle est restée inachevée. Je l'ai fait compiler après l'ajout de [ReadOnlyArray], [WriteOnlyArray] attributs à la méthode des paramètres de type tableau et après modification du projet d'espace de noms pour quelque chose de pas partir avec des "Fenêtres" - winmd projet de limitation.
Même si j'étais en mesure d'utiliser cette librairie dans ma Tâche en arrière-plan de projet, il n'était pas de travail, parce que, comme je l'ai découvert, WriteableBitmap doit être instancié dans le thread de l'INTERFACE utilisateur et ce n'est pas possible pour autant que je sais en Tâche de Fond.
En attendant, j'ai aussi trouvé ce MSDN article sur la manipulation des Images WinRT. La plupart des échantillons il y a seulement dans la section JavaScript, donc j'ai dû convertir en C# en premier. J'ai aussi trouvé ce utile article sur StackOverflow sur la manipulation des images WinRT.
Dans cet exemple, nous ouvrir un fichier, de le décoder en tableau d'octets, et l'encoder de retour dans un nouveau fichier avec une taille différente/format/la qualité.
Le résultat est entièrement de travail de manipulation de l'image, même dans Windows Runtime Classe de Composant et sans WriteableBitmapEx bibliothèque.
avez-vous un exemple de code pour cela ? Il est demandé pour les cours de TargetJpegQuality
OriginalL'auteur Martin Suchan
Ici est la même version plus courte, sans surcharge d'accéder à des données de pixels.
OriginalL'auteur noxo
Je viens de passer la dernière heure et demi à essayer de comprendre de ça, j'ai un tableau d'octets qui est un JPG et a essayé de la réponse donnée... je ne pouvais pas le faire fonctionner je suis donc de mettre en place une nouvelle réponse... j'espère que cela aidera quelqu'un d'autre... je suis de convertir le JPG à 250/250 pixels
OriginalL'auteur Stuart Smith
si vous voulez de la qualité de l'image puis ajouter
InterpolationMode = BitmapInterpolationMode.Fant dans BitmapTransform ,
ici est un exemple de
`
public static async Task ResizeImage(Windows.Le stockage.StorageFile imgeTOBytes, int maxWidth, int maxHeight)
{
OriginalL'auteur Kishan.JSK