2009-09-29 12 views
-1

Quelqu'un peut-il me dire, comment charger les images haute résolution dans Windows Mobile en utilisant C#. Je reçois le OutOfMemoryException pour cela.Comment charger les images haute résolution dans Windows Mobile

+0

Vous pouvez inclure le code que vous utilisez? serait utile. – RRUZ

+0

Merci pour votre réponse, j'utilise aussi cette méthode, mais le problème est .. IntPtr hdcDest = gxBuffer.GetHdc(); Rectangle dstRect = nouveau Rectangle (gauche, haut, droite, bas); imagingImage.Draw (hdcDest, ref dstRect, IntPtr.Zero); gxBuffer.ReleaseHdc (hdcDest); e.Graphics.DrawImage (backBuffer, 0,0); nous obtenons memoryoutofexception à "imagingImage.Draw (hdcDest, ref dstRect, IntPtr.Zero);" en utilisant Bitmap backBuffer = new Bitmap (Largeur, Hauteur, PixelFormat.Format32bppRgb)), Bitmap backBuffer = nouveau Bitmap (largeur, hauteur) est-ce que PixelFormat.Format32bppRgb est important ou pas? – Naruto

Répondre

0

Utilisez IImagingFactory et IImage, ce sont des objets com qui ont été introduits dans WCE 5.0.

Vous devrez écrire des wrappers de com pour eux, ou utiliser OpenNETCF qui les a déjà.

Voir here pour un billet de blog de Chris Lorton sur alphablending et les classes d'usine d'imagerie et comment les utiliser de .net

+0

Merci pour votre réponse, je suis également en utilisant cette méthode MENT wat u .. mais le problème est .. IntPtr hdcDest = gxBuffer.GetHdc(); Rectangle dstRect = nouveau Rectangle (gauche, haut, droite, bas); imagingImage.Draw (hdcDest, ref dstRect, IntPtr.Zero); gxBuffer.ReleaseHdc (hdcDest); e.Graphics.DrawImage (backBuffer, 0,0); nous obtenons memoryoutofexception à "imagingImage.Draw (hdcDest, ref dstRect, IntPtr.Zero);" nous aimons, pas bitmap de caisse à l'aide (Bitmap backbuffer = new Bitmap (largeur, hauteur, PixelFormat.Format32bppRgb)) insted, Bitmap backbuffer = new Bitmap (largeur, hauteur) fait des questions ou PixelFormat.Format32bppRgb ne pas? – Naruto

+0

Je ne crois pas, vérifiez les tailles dans votre dstRect, car IImage s'attend à ce que right et bottom soient des positions absolues, pas la largeur et la hauteur comme dans le constructeur de rect. J'ai utilisé le code que vous avez plusieurs fois dans mon application WM, la plupart du temps, j'ai des exceptions sur le dessin, c'est quand le dstRect n'est pas configuré correctement. Quelle est la taille de l'image que vous essayez de dessiner et de quel format s'agit-il? – Matt

+0

Merci ... La résolution d'image est 3000X2000. J'utilise comme ça bitmap = new Bitmap (width, height); graphics = Graphics.FromImage (bitmap); IntPtr hdcDest = graphiques .GetHdc(); Rectangle dstRect = nouveau Rectangle (0, 0, bitmap .width, bitmap .height); Image.Draw (hdcDest, ref dstRect, IntPtr.Zero); – Naruto

0

Ce code montre une forme avec une image 2MB jpg sur un formulaire (3000x2000 ou si) à 240x320, sans aucune exception de MOO. Évidemment, vous devrez le ranger pour éliminer le bmp et libérer les objets com etc. mais cela fonctionne et je l'ai essayé sur l'émulateur wm6.5.

public partial class Form1 : Form 
{ 
    IImage smallImage; 
    Bitmap bmp = new Bitmap(240, 320); 

    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void Form1_Load(object sender, EventArgs e) 
    { 
     IImage fullSizeImage; 
     IImagingFactory factory = new ImagingFactoryClass(); 
     factory.CreateImageFromFile(@"\My Documents\My Pictures\luminous opera house.jpg", out fullSizeImage); 

     fullSizeImage.GetThumbnail(240, 320, out smallImage); 

     using (Graphics gfx = Graphics.FromImage(bmp)) 
     { 
      IntPtr hdc = gfx.GetHdc(); 
      try 
      { 
       smallImage.Draw(hdc, new Rectangle(0, 0, 240, 320), IntPtr.Zero); 
      } 
      finally 
      { 
       gfx.ReleaseHdc(hdc); 
      } 
     } 
    } 

    protected override void OnPaint(PaintEventArgs e) 
    { 
     e.Graphics.DrawImage(bmp, 0, 0); 
    } 
} 
+0

J'utilise la bibliothèque d'imagerie opennetcf, d'où le ImageFactoryClass, mais j'ai changé l'appel à IImage.Draw pour utiliser un rectangle et intptr plutôt que RECT et null, comme je pense que vous devrez probablement faire si vous n'utilisez pas opennetcf – Matt

+0

nous n'utilisons pas "opennetcf", fullSizeImage.GetThumbnail (240, 320, out smallImage); comme je l'ai vu pour de plus grands pixels d'image, la qualité de l'image va baisser. draw API donne OOM – Naruto

+0

Je sais que vous n'utilisez pas opennetcf, c'est pourquoi j'ai changé l'appel à Draw. Ils ne sont que des wrappers autour de la com de toute façon. Et oui, l'appel à vignette va pixelliser l'image comme elle le rétrécit. Avez-vous besoin de faire le réglage de la taille de l'image sur l'appareil? Ne pouvez-vous pas dimensionner l'image de manière appropriée et l'inclure avec votre application? – Matt

Questions connexes