begin process at 2012 02 11 13:51:56
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

DirectX / OpenGL

 > AFFICHAGE D'UNE IMAGE JPG AVEC DIRECT3D MOBILE 5.0

AFFICHAGE D'UNE IMAGE JPG AVEC DIRECT3D MOBILE 5.0


 Information sur la source

Note :
Aucune note
Catégorie :DirectX / OpenGL Source .NET ( DotNet ) Classé sous :direct3d, mobile, image, 2d, jpg Niveau :Expert Date de création :07/04/2006 Vu / téléchargé :12 310 / 408

Auteur : Diabolus

Ecrire un message privé
Site perso
Commentaire sur cette source (7)
Ajouter un commentaire et/ou une note

 Description

Bonjour
J'ai cherche quelque temps pour trouver comment afficher une simple image a l'ecran avec Direct3D Mobile 5.0 sur mon telephone.
Je vous ai mis cette source que j'ai realisee a partir de plusieurs toturiaux dont je me suis servit et de l'aide que j'ai eu sur Codes-sources.
DirectX Mobile 5.0 ne contient pas DirectDraw, donc pour faire de la 2D, vous n'avez pas le choix il faut passer par Direct3D.

L'affichage d'une image se fait par le biais de la creation de deux triangles (positionnes et construits pour qu'ils forment un rectangle) qui seront textures avec l'image a afficher.

Source

  • using System;
  • using System.Collections.Generic;
  • using System.Windows.Forms;
  • using System.Drawing;
  • using Microsoft.WindowsMobile.DirectX;
  • using Microsoft.WindowsMobile.DirectX.Direct3D;
  • using System.Reflection;
  • namespace DarkDominion
  • {
  • class GraphicEngine : System.Windows.Forms.Form
  • {
  • /// <summary>
  • /// The main entry point for the application.
  • /// </summary>
  • [MTAThread]
  • static void Main()
  • {
  • GraphicEngine fenetre = new GraphicEngine();
  • fenetre.InitializeGraphics();
  • fenetre.Show();
  • while (fenetre.Created)
  • {
  • fenetre.Render();
  • Application.DoEvents();
  • }
  • fenetre.DisposeGraphics();
  • }
  • public Device device;
  • public bool Created;
  • public Texture texture;
  • public VertexBuffer vertices;
  • public VertexBuffer vertices2;
  • protected bool InitializeGraphics()
  • {
  • Created = true;
  • PresentParameters pres = new PresentParameters();
  • // Plein ecran, dans le cas ou vous ne voulez pas du plein ecran, retirer les affectations
  • // du BackBufferWidth et du BackBufferHeight qui seront correctement geres tout seuls
  • pres.Windowed = false;
  • pres.BackBufferWidth = this.Width;
  • //pres.BackBufferHeight = this.Height;
  • // En utilisant la ligne precedente qui semblerait normal, la taille ne sera pas exactement
  • // la bonne car il prendra encore en compte la barre du menu demarrer en haut
  • pres.BackBufferHeight = this.Width * 4 / 3; // avec cette affectation la taille est la bonne
  • pres.SwapEffect = SwapEffect.CopyVSync;
  • device = new Device(0, DeviceType.Default, this, CreateFlags.None, pres);
  • // Chargement de la texture
  • texture = CreateOverlayTexture(device);
  • // creation du premier triangle
  • vertices = CreateVertexBuffer(device);
  • // creation du second triangle
  • vertices2 = CreateVertexBuffer2(device);
  • return true;
  • }
  • protected VertexBuffer CreateVertexBuffer(Device device)
  • {
  • VertexBuffer buf = new VertexBuffer(typeof(CustomVertex.TransformedTextured), 3, device, 0, CustomVertex.TransformedTextured.Format, Pool.Managed);
  • PopulateVertexBuffer(buf);
  • return buf;
  • }
  • protected void PopulateVertexBuffer(VertexBuffer vertices)
  • {
  • // Notez qu'on utilise TransformedTextured
  • CustomVertex.TransformedTextured[] verts =(CustomVertex.TransformedTextured[])vertices.Lock(0, 0);
  • int i = 0;
  • verts[i++] = new CustomVertex.TransformedTextured(
  • 0, 0, 0.5F, // position du sommet
  • 1, // rhw (avancé)
  • 0, 1); // coordonnées texture
  • verts[i++] = new CustomVertex.TransformedTextured(
  • Width, Height, 0.5F,
  • 1,
  • 1, 0);
  • verts[i++] = new CustomVertex.TransformedTextured(
  • 0, Height, 0.5F,
  • 1,
  • 1, 1);
  • vertices.Unlock();
  • }
  • protected VertexBuffer CreateVertexBuffer2(Device device)
  • {
  • VertexBuffer buf = new VertexBuffer(typeof(CustomVertex.TransformedTextured), 3, device, 0, CustomVertex.TransformedTextured.Format, Pool.Managed);
  • PopulateVertexBuffer2(buf);
  • return buf;
  • }
  • protected void PopulateVertexBuffer2(VertexBuffer vertices)
  • {
  • CustomVertex.TransformedTextured[] verts = (CustomVertex.TransformedTextured[])vertices.Lock(0, 0);
  • int i = 0;
  • verts[i++] = new CustomVertex.TransformedTextured(
  • 0, 0, 0.5F, // position du sommet
  • 1, // rhw (avancé)
  • 0, 1); // coordonnées texture
  • verts[i++] = new CustomVertex.TransformedTextured(
  • Width, 0, 0.5F,
  • 1,
  • 0, 0);
  • verts[i++] = new CustomVertex.TransformedTextured(
  • Width, Height, 0.5F,
  • 1,
  • 1, 0);
  • vertices.Unlock();
  • }
  • protected Texture CreateOverlayTexture(Device device)
  • {
  • Texture t = TextureLoader.FromStream(device, Assembly.GetExecutingAssembly().GetManifestResourceStream("DarkDominion.Photos.HERVE_Production_Logo.jpg"));
  • return t;
  • }
  • protected void Render()
  • {
  • device.Clear(ClearFlags.Target, Color.Black, 1.0F, 0);
  • device.BeginScene();
  • // Nouvelle ligne
  • device.SetTexture(0, texture);
  • //device.VertexFormat = CustomVertex.TransformedTextured.Format;
  • device.SetStreamSource(0, vertices, 0);
  • device.DrawPrimitives(PrimitiveType.TriangleList, 0, 1);
  • device.SetStreamSource(0, vertices2, 0);
  • device.DrawPrimitives(PrimitiveType.TriangleList, 0, 1);
  • device.EndScene();
  • device.Present();
  • }
  • protected void DisposeGraphics()
  • {
  • device.Dispose();
  • }
  • }
  • }
using System;
using System.Collections.Generic;
using System.Windows.Forms;
using System.Drawing;
using Microsoft.WindowsMobile.DirectX;
using Microsoft.WindowsMobile.DirectX.Direct3D;
using System.Reflection;

namespace DarkDominion
{
    class GraphicEngine : System.Windows.Forms.Form
    {
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [MTAThread]
        static void Main()
        {
            GraphicEngine fenetre = new GraphicEngine();
            fenetre.InitializeGraphics();
            fenetre.Show();
            while (fenetre.Created)
            {
                fenetre.Render();
                Application.DoEvents();
            }
            fenetre.DisposeGraphics();
        }


        public Device device;
        public bool Created;
        public Texture texture;
        public VertexBuffer vertices;
        public VertexBuffer vertices2;

        protected bool InitializeGraphics()
        {
            Created = true;
            PresentParameters pres = new PresentParameters();
			// Plein ecran, dans le cas ou vous ne voulez pas du plein ecran, retirer les affectations
			// du BackBufferWidth et du BackBufferHeight qui seront correctement geres tout seuls
            pres.Windowed = false;
            pres.BackBufferWidth = this.Width;
            //pres.BackBufferHeight = this.Height;
			// En utilisant la ligne precedente qui semblerait normal, la taille ne sera pas exactement
			// la bonne car il prendra encore en compte la barre du menu demarrer en haut
            pres.BackBufferHeight = this.Width * 4 / 3; // avec cette affectation la taille est la bonne
            pres.SwapEffect = SwapEffect.CopyVSync;
            device = new Device(0, DeviceType.Default, this, CreateFlags.None, pres);

			// Chargement de la texture
            texture = CreateOverlayTexture(device);
			// creation du premier triangle
            vertices = CreateVertexBuffer(device); 
			// creation du second triangle
            vertices2 = CreateVertexBuffer2(device);
            return true;
        }

        protected VertexBuffer CreateVertexBuffer(Device device)
        {
            VertexBuffer buf = new VertexBuffer(typeof(CustomVertex.TransformedTextured), 3, device, 0, CustomVertex.TransformedTextured.Format, Pool.Managed);
            PopulateVertexBuffer(buf);
            return buf;
        }


        protected void PopulateVertexBuffer(VertexBuffer vertices)
        {
            // Notez qu'on utilise TransformedTextured
            CustomVertex.TransformedTextured[] verts =(CustomVertex.TransformedTextured[])vertices.Lock(0, 0);
            int i = 0;
            verts[i++] = new CustomVertex.TransformedTextured(
              0, 0, 0.5F, // position du sommet
              1,                           // rhw (avancé)
              0, 1);                       // coordonnées texture
            verts[i++] = new CustomVertex.TransformedTextured(
              Width, Height, 0.5F,
              1,
              1, 0);
            verts[i++] = new CustomVertex.TransformedTextured(
              0, Height, 0.5F,
              1,
              1, 1);

            vertices.Unlock();
        }

        protected VertexBuffer CreateVertexBuffer2(Device device)
        {
            VertexBuffer buf = new VertexBuffer(typeof(CustomVertex.TransformedTextured), 3, device, 0, CustomVertex.TransformedTextured.Format, Pool.Managed);
            PopulateVertexBuffer2(buf);
            return buf;
        }


        protected void PopulateVertexBuffer2(VertexBuffer vertices)
        {
            CustomVertex.TransformedTextured[] verts = (CustomVertex.TransformedTextured[])vertices.Lock(0, 0);
            int i = 0;
            verts[i++] = new CustomVertex.TransformedTextured(
              0, 0, 0.5F, // position du sommet
              1,                           // rhw (avancé)
              0, 1);                       // coordonnées texture
            verts[i++] = new CustomVertex.TransformedTextured(
              Width, 0, 0.5F,
              1,
              0, 0);
            verts[i++] = new CustomVertex.TransformedTextured(
              Width, Height, 0.5F,
              1,
              1, 0);

            vertices.Unlock();
        }

        
        protected Texture CreateOverlayTexture(Device device)
        {
            Texture t = TextureLoader.FromStream(device, Assembly.GetExecutingAssembly().GetManifestResourceStream("DarkDominion.Photos.HERVE_Production_Logo.jpg"));
            return t;
        }


        protected void Render()
        {
            device.Clear(ClearFlags.Target, Color.Black, 1.0F, 0);
            device.BeginScene();


            // Nouvelle ligne
            device.SetTexture(0, texture);


            //device.VertexFormat = CustomVertex.TransformedTextured.Format;
            device.SetStreamSource(0, vertices, 0);
            device.DrawPrimitives(PrimitiveType.TriangleList, 0, 1);
            device.SetStreamSource(0, vertices2, 0);
            device.DrawPrimitives(PrimitiveType.TriangleList, 0, 1);


            device.EndScene();
            device.Present();
        }

        protected void DisposeGraphics()
        {
            device.Dispose();
        }
    }
}

 Conclusion

Le code est encore assez redondant, mais je vais l'ameliorer pour le rendre plus generique et pratique a utiliser.
La source vous permettra de comprendre comment faire de la 2D avec Direct3D Mobile 5.0

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Sources de la même categorie

Source avec Zip Source avec une capture Source .NET (Dotnet) 3VE-WALKER par jyce3d
Source avec Zip Source avec une capture Source .NET (Dotnet) IMAGINE: BASE D'UN MOTEUR 3D DIRECTX par Children
Source avec Zip Source avec une capture Source .NET (Dotnet) DIRECTX OVERLAY - CHANGE WALLPAPER ON DESKTOP WITH DIRECTX par youpiyoyo
Source avec une capture Source .NET (Dotnet) SE SERVIR D'UNE MANETTE OU JOYSTICK par soussous78
Source avec Zip Source avec une capture Source .NET (Dotnet) MOVIE PLAYER (MANAGED DIRECTX) par Zap

 Sources en rapport avec celle ci

Source avec Zip Source .NET (Dotnet) BALLON, CAREE ET IMAGE QUI TOURNENT, SE GONFLENT ET SE DGONF... par zertyx
Source avec Zip Source .NET (Dotnet) PUZZLE 4X4 par jrscofield
Source avec Zip SILVERLIGHT 4: BOUTON À 3 IMAGES par BumpMANN
Source .NET (Dotnet) AJOUT D'UNE IMAGE DANS UN RICHTEXTBOX SANS PRESS-PAPIER par yohan49
Source avec Zip Source avec une capture Source .NET (Dotnet) SCREEN EN SÉRIE par leproc

Commentaires et avis

Commentaire de sebseb42 le 07/04/2006 16:00:10

tu peux utiliser un seul VertexBuffer dans lequel tu met tous les points, et ensuite tu fait un seul appel a SetStreamSource et DrawPrimitives :

device.SetStreamSource(0, vertices, 0);
device.DrawPrimitives(PrimitiveType.TriangleList, 0, 2);

2  pour dire que tu as 2 triangles dans ton VertexBuffer. Aussi, DirectDraw est deprecated, tout comme GAPI... il a été a plusieurs reprises démontrer qu'il était carrement plus rentable de tracer (meme de la 2D) en utilisant les fonctionnalitées 3D... et donc forcement, par ce biais, la question la plus legitime a se poser est : "dans ce cas pourquoi maintenir 3 lib differentes alors qu'une seul rempli le boulot des 2 autres et de maniere plus performante".

voila

Commentaire de gretata le 26/01/2007 11:16:04

Bonjour, dit moi tu le trouve ou le Microsoft.WindowsMobile.DirectX.Direct3D
Microsoft.WindowsMobile.DirectX;

??

car j'arrive pas a le trouver

merci

Commentaire de Diabolus le 26/01/2007 23:40:52

Salut
Une fois que tu as installé correctement le SDK et que tu as créé ton projet pour Windows Mobile 5 (pour Pocket PC ou Smartphone ou autre), dans le menu "Solution Explorer" (la liste de tes fichiers), déplies "References" et fais bouton droit sur "References", puis "Add References"et dans l'onglet ".NET" tu trouveras "Microsoft.WindowsMobile.DirectX". Tu fais OK et tu pourras ensuite faire fonctionner le "using Microsoft.WindowsMobile.DirectX.Direct3D" et "using Microsoft.WindowsMobile.DirectX"

J'espère que cela t'aura aidé
A++

Commentaire de gretata le 29/01/2007 13:22:07

Merci beaucoup d'avoir repondu aussi vite, je vois se qui faut faire, encore une fois merci et bonne journée

Commentaire de babou6a le 14/10/2008 21:39:05

Bonjour,
Je trouve très intéressant de trouver des morceaux de code dans ce genre pour apprendre.
Cependant j'ai un petit problème, car à l'exécution le texture loader retourne null ce qui fait un exception.
Pourtant j'ai bien changé le fichier et mis ma propre texture, je ne comprends pas.

Babou

Commentaire de patpout le 16/05/2010 13:37:06

bonjour
vous pouvez m'aider  pour développer une petite application  pour se connecter a un serveur apache  et afficher le contenu d'un fichier texte via windows mobile .
et merci d'avance :)

Commentaire de Diabolus le 16/05/2010 21:56:53

Bonsoir
communiquer avec un serveur apache, c'est à dire requête HTML (ou PHP...) donc utilise Internet Explorer de ton Windows Mobile, ou n'importe quel navigateur web installable sur Windows Mobile.

Je n'ai jamais travaillé sur la communication réseau sur Windows Mobile. Regarde sur MSDN par exemple. Ils donnent de nombreux exemples de code.
Bonne soirée

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Conversion d'un BMP en JPG [ par projetbts ] Bonjour,Je cherche, par besoin de place, à convertir une image bmp en jpeg. Celle ci est, dans un premier temps, destiné a être placé en image (img sr Redimensionnement image [ par Diamondduff ] Mon but est de faire des vignettes(jpg) &#224; partir d'une image (toujours en jpg)Il existe la m&#233;thode GetThumbnailImage (classe image), le prob Image.FromFile et File.Delete/File.Move [ par JuS ] Bonjour,Voici mon problème. Je suis en train de développer une application qui va chercher des images pour les afficher. Jusque là tout va bien.J'affi Panoramique 2D / une promenade dans une image [ par Bobbbbbbbbbby ] Salut alors je cherche pour un projet trés précis a réaliser une sorte de promenade dans une image qui mesure 6000px x 1200px je sais pas du tout comm Afficher un JPG avec DirectX Mobile [ par Diabolus ] Bonjour a tousVoila je cherche a afficher une image JPG avec DirectX Mobile present sur le Windows Mobile 5.0.Il y a quelques nuences avec le DirectX Tag EXIF dans Jpg [ par olibara ] Bonjour Quelqu'un a-t-il déja joué avec les tags EXIF d'une image JPEG ?Particulierement en vue de sauver une image avec des tags heure, date etc ? Comparaison d'image (jpg et webcam) [ par Byrong ] Bonsoir j'espère que je me suis pas tromper de catégorie pour le forum. Voila en fait j'ai fait un programme qui va capturer une image avec la webca [C#] Compression d'image [ par bibicool ] Bonjour &#224; tous, Dans mon projet, je dois faire des acquisitions d'image, tout fonctionne nickel, l'acquisition de mon image se passe bien et m Faire de la 2D avec Direct3D [ par vincentClimber ] Bonjour,je cherche un moyen&nbsp;pour faire une DLL C# en DX9 manag&#233; utilisant Direct3D qui me permette de faire des traitements simple 2D (Ellip Résolution d'image [ par DavDav02 ] Salut &#224; tous,Je suis en BTS et je dois r&#233;aliser un projet de capture + traitement d'image.Je rencontre un petit probl&#232;me et j'aurais be


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,967 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales