begin process at 2012 05 29 13:27:52
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Au secours

 > 

[MFC] Copie de CDC


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

[MFC] Copie de CDC

samedi 31 janvier 2004 à 20:56:36 | [MFC] Copie de CDC

Atmaweapon

Bon, voila, j'utilise 2 images dans ma MFC (SDI) que j'affiche en 'fond' de mon document...
Pourquoi 2 images ? Parce que j'ai mon image source (celle d'origine) et puis celle que j'utilise 'courrament' (en fond quoi.... je rajoute des trucs par dessus...)

Donc jusque la, tout va bien ... le problème c'est que je voudrais 'optimiser' un p'tit peu mon code ... a savoir qu'a l'initialisation de mes images .... je réalise 2 fois la meme opération ... a savoir :

[Lecture de mon image dans img]
// Pointeurs sur mon image 'courante'
CBitmap* pbmOffScreen = new CBitmap();
CDC* pdcOffScreen = new CDC();

// Pointeurs sur l'image 'source'
CBitmap* pbmSource = new CBitmap();
CDC* pdcSource = new CDC();

Pixel pix;


// Initialisation des pointeurs d'image
pbmOffScreen->DeleteObject();
pbmOffScreen->CreateCompatibleBitmap(pDC, img->w, img->h);
// Note : la largeur/hauteur de l'image sont accessible via img->w et img->h (des fois que vous auriez pas compris :p)

pdcOffScreen->DeleteDC();
pdcOffScreen->CreateCompatibleDC(pDC);
pdcOffScreen->SelectObject(*pbmOffScreen);

// Deja la, on fait cette partie en 'double'....
pdcSource->DeleteDC();
pdcSource->CreateCompatibleDC(pDC);
pdcSource->SelectObject(*pbmSource);

pbmSource->DeleteObject();
pbmSource->CreateCompatibleBitmap(pDC, img->w, img->h);


for(int i=0; i<img->w; i++)
{
for(int j=0; j<img->h; j++)
{
pix = img->pixels[i + j*img->w];
pdcOffScreen->SetPixel(CPoint(i,j), RGB(pix.R,pix.G,pix.B));
// On fait ici aussi ca en 'double' ....
pdcSource->SetPixel(CPoint(i,j), RGB(pix.R,pix.G,pix.B));
}
}


Donc voila.... je me demandais s'il n'existait pas un constructeur par copie de CDC (j'ai regardé ... il n'y a pas l'air d'y en avoir..) ou un truc qui permettrait de 'dupliquer rapidement' un CDC dans un autre... sans avoir a se l'initialiser en meme tps que le premier....

(en espérant avoir été clair .... ^^;;; )
vendredi 6 février 2004 à 00:10:09 | Re : [MFC] Copie de CDC

ymca2003

Réponse acceptée !
pDCDest->BitBlt(0, 0, cx, cy, pDCSrc, 0, 0, SRCCOPY);

recopie le contenu de pDCSrc dans pDCDest.
vendredi 6 février 2004 à 06:52:38 | Re : [MFC] Copie de CDC

Atmaweapon

yep .... j'a v trouvé (a force de chercher ^_^) ... par contre c vrai ke j'a v pas pensé a mettre la solution ....
Merchi qd meme =)
mardi 21 septembre 2004 à 14:27:11 | Re : [MFC] Copie de CDC

Atmaweapon

Je sais pas si ca va t'etre utile puisque j'utilise une lib annexe pour la lecture/utilisation d'images : www.libsdl.org
Si tu utilises également SDL, pas de pbs a ce que je mette le code si tu veux...
mardi 21 septembre 2004 à 14:58:34 | Re : [MFC] Copie de CDC

Atmaweapon

Pour afficher ton image, il faut que tu ailles dans ton Handler d'affichage (méthode onPaint() ou onDraw() ) et que tu fasses par exemple :


void MonProjetView::OnDraw(CDC* pDC)
{
if(blit_needed)
pDC->BitBlt(10, 20, pbmOffScreen->GetBitmapDimension().cx, pbmOffScreen->GetBitmapDimension().cy, &pdcOffScreen, 0, 0, SRCCOPY);
}


Attention : cela suppose qu'on ait comme attribut a la classe courante :
CDC *pdcOffScreen ; // dans l'exemple précédent, on travaille avec un attribut au lieu d'une variable déclarée dans la méthode (virer la déclaration de pdcOffScreen
CBitmap *pbmOffScreen ; // idem
bool blit_needed = false; // Va valoir 'true' une fois qu'on aura 'rempli' l'OffScreen ... a la suite de l'exemple précédent par exemple...

-> Ca va afficher l'image chargée en se placant en laissant 10 pixel sur la gauche et 20 pixel par rapport au haut de la fenetre


Pour enregistrer dans un fichier, bah ca doit exister.. mais j'ai pas les fonctions sous la main ...
'Au pire' tu fais un fichier raw (tous les pixels a la suite les uns des autres) ou tu va récupérer le format de fichier bmp qui est pas compliqué (un entete puis les pixels a la suite les uns des autres) ...
mardi 21 septembre 2004 à 15:00:31 | Re : [MFC] Copie de CDC

Atmaweapon

EDIT : c'est pdcOffScreen et non &pdcOffScreen (dans l'appel a la méthode BitBlt() ) ... on travaille avec des pointeurs...


Cette discussion est classée dans : image, img, cdc, pix, pdcoffscreen


Répondre à ce message

Sujets en rapport avec ce message

Introduire une image BMP dans un prog C [ par 751 ] 751 je voudrais afficher en fond d'écrande mon programme coè en C une image Bmp et j'ai beau chercher je ne trouve pas comment faire je voudrais savo Scrollbar sous GTK+ [ par retiky ] salut je voudrais ajouter une scrollbar sur une VBox qui contient une image. Cette VBox est elle meme contenu ds une autre VBox contenant aussi la bar problème d'allocation de classe [ par dark_naruto25 ] Salut les amis Voilà un autre problème bizzard. J'ai une classe appelé Bitmap, qui comme son nom l'indique gère une image bmp. Bref, à côté de cette c CDC, capture d'écran à imprimer [ par Florenzau ] Bonjour, Je réalise en ce moment, un soft qui m'affiche des courbes de mesures à l'écran (avec curseurs, labels....)Je souhaiterai pouvoir réaliser un GTKMM dessiner une image ou presque [ par Ricool ] Bonjour, voici mon probleme, je dois dessiner une image dans un rectangle de taille variable (h, l) qui se redimensionne avec ma fenetre. Pour dessin Codage image .img [ par gouzi_666 ] Bonjour, je travaille sur un projet de traitement d'image. Les images ou plutôt les fichiers images sur lesquels je travaille sont des fichiers d'imag Déplacer une image avec la souris [ par ingelishome ] Bonjour,Je suis en train de faire une petite appli sous Borland C++ Builder dans lequel j'ai besoin de déplacer une image. Pour ce faire j'ai eu au dé code? [ par cpierrenet ] bj les amis mon blem n'est tjs pas résolu, je le repose autrement et si je ne suis pas clair dit importation image en SDL [ par Richard94 ] Bonjour, voila j'ai un petit probleme en SDL, j'essaye d'importer une image format "xcf" en faisant IMG_load sous codeblocks, mais ça ne marche pas. P diaporama as3 [ par djou12000 ] Bonjour, Je n'ai pas trouvé de codes similaires dans vos tutos, c'est pourquoi je me permets de demander de l'aide... Je suis totalement débutante s


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
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,296 sec (4)

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