begin process at 2012 05 28 17:31:05
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Windows

 > 

Autre

 > 

Bitmaps splitté qui s'affichent a l'envers


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

Bitmaps splitté qui s'affichent a l'envers

vendredi 19 janvier 2007 à 16:01:14 | Bitmaps splitté qui s'affichent a l'envers

milhandril

Je suis actuellement sur un projet dont une parti necessite un petit editeur de map en 2D. Je prend un bitmap que je "découpe" en Tile de 32*32 (en fait je me contente de spliiter le bitmap pour n'afficher que la partie qui m'interesse). Si dans chaque "case" c'est bien le bon bitmap qui apparait il se retrouve la tete en bas.

Je pense que cela vient du fait que dans la vue que j'utilise le point d'origine des coordonnées est en haut a gauche alors que celui du bitmap est en bas à gauche. Bon en tout cas voila le code responsable de ca si jamais quelqu'un a une idée de ce qui peut clocher...

 



//la methode OnDraw de ma view

void CMapCreateView::OnDraw(CDC* pDC)

{

CSquaresDoc* pDoc = GetDocument();

ASSERT_VALID(pDoc);

CPoint pos=CScrollView::GetDeviceScrollPosition();

OnPrepareDC (pDC);

pDC->DPtoLP (&pos);

CRect Rect ;

GetClientRect(&Rect) ;

pDC->SetMapMode (MM_LOENGLISH);

CRect rect;

pDC->GetClipBox (&rect);

for (int i=0; i<largeur; i++)

{

   for (int j=0; j<longueur; j++)

    {

   int x1 = (i * 32) + 32;

    int y2 = (j*(-32))-64;

   if (y2>(rect.BottomRight().y-32) && y2<(rect.TopLeft().y+32))

   {

   pDoc->m_clrCurrentBitmap.DrawPartOfBitmap(pDC,x1,y2,i+1,j+1);

}

TabEdit[i][j].x=i+1;

TabEdit[i][j].y=j+1;

}

}
[..]
}

//Et voila ma méthode DrawPartOfBitmap inspiré d'un code tiré du site

BOOL CMaskedBitmap::DrawPartOfBitmap(CDC *dc,int xpos,int ypos,int x, int y)

{

CRect rect;

dc->GetClipBox (&rect);

_xparts = 8;

_yparts = 160;

if (x <= 0 || x > _xparts || y>_yparts || y <= 0)

return false;

_filename="Tiles.bmp";

CString szFilename(_filename);

HBITMAP hBmp = (HBITMAP)::LoadImageA(NULL,szFilename,

IMAGE_BITMAP,0,0,

LR_LOADFROMFILE|LR_CREATEDIBSECTION);

CBitmap bmp;

bmp.Attach(hBmp);

CDC bmDC;

bmDC.CreateCompatibleDC(dc);

CBitmap *pOldbmp = bmDC.SelectObject(&bmp);

BITMAP bi;

bmp.GetBitmap(&bi);

int xwidth, ywidth;

xwidth = bi.bmWidth/_xparts;

ywidth = bi.bmHeight/_yparts;

dc->BitBlt(xpos,ypos,xwidth,ywidth,&bmDC,(x-1)*xwidth,(y-1)*ywidth,SRCCOPY);

return true;

}

 

vendredi 19 janvier 2007 à 16:15:47 | Re : Bitmaps splitté qui s'affichent a l'envers

buno

Administrateur CodeS-SourceS
Salut,
Il faut que tu vérifie comment est stocké ton bitmap car il se peut qu'il soit stocké à partir du pixel en bas à droite d'abord pour remonter jusqu'en haut à gauche.
regarde ma source, j'explique ce "phénomène"...enfin, je crois

Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Le site de mon mariage
lundi 22 janvier 2007 à 14:19:19 | Re : Bitmaps splitté qui s'affichent a l'envers

milhandril

Code très interessant... Je pense qu'il va finir par me servir mais pas pour le poblème qui me préoccupe. Dans ton code tu met le bitmap en mémoire (gestion du header du bitmap etc...) alors que je ne vais pas jusque là. Je me contente d'afficher le bitmap sans entrer dans le fichier a proprement parlé et de n'en afficher que la partie qui m'interesse.

Autre petit point c'est normal que les fichiers qui sont copié soient en noir et blanc chez moi? Ca vient peut etre de la ligne

m_NbPaletteEntries=(

int)pow((2,m_Header.m_BPP); dans le loadPalette que j'ai du modifié en

m_NbPaletteEntries=

pow((longdouble)2,(int)m_Header.m_BPP); car ma version de visual me disait qu'il y avait une surcharge de fonction ambigue (je suis sous visual studio 2005)


Cela étant dit je n'ai toujours pas trouvé la solution a mon problème.
mercredi 24 janvier 2007 à 04:27:17 | Re : Bitmaps splitté qui s'affichent a l'envers

milhandril

Bon  pour ceux que ca pourrait interesser par la suite j'ai trouvé (partiellement) la solution. Et quand j'ai vu a quel point c'était bete je me suis triaté de tout les nom enfin bon...

Il suffit juste d'ajouter bmDC.
SetMapMode (MM_LOENGLISH); après bmDC.CreateCompatibleDC(dc);

Reste plus qu'a savoir pourquoi le RECt correspondant à bmpDC a un top de 0 et un bottom de -6048 alors que le RECT de dc à un top de 0 et un bottom de 5120 (ce qui est la hauteur de mon bitmap). Résultat: les tiles que j'obtient sont trop grande.

Si quelqu'un à la solution... parceque là je sèche!


Cette discussion est classée dans : int, rect, bmp, bitmap, pdc


Répondre à ce message

Sujets en rapport avec ce message

Accelération affichage image bitmap [ par corben dallas ] Bonjour à tous,Mon problème est le suivant: je cherche à afficher un flux vidéo constitué d'images bitmap dans une fenêtre. Mon code est le suivant:dc Problème avec TransparentBlt( ) [ par NAVIE ] Bonjour, j'ai décidé de céer un programme avec mon compilateur DevCpp qui se charge de dessiner des bitmaps. Pour cela j'utilise une fonction appellé Mes bitmap se barrent [ par oceax ] Salut !Voila j'ai fais une boite de dialogue en Win32 et j'ai inséré une bmp à l'aide de LoadBitmap() et pis DrawState(). Ma bitmap s'affiche impeccab Diaporama d'images bitmaps... le plus simple possible... [ par Druith2 ] Bonjour, je galère depuis le début de la semaine (je suis un neophyte veritable). Je cherche un moyen simple pour créer un diaporama de 12 images bitm Hwnd [ par T_Mehdi ] salut a tous .bon j'ai realiser une fonction qui permet douvrir des fichier bmp et les affichier sur un hwnd preci.le prob est que quand je reduit ou VC++ : Ecrire un fichier BMP [ par Ayla_21 ] Bonjour tout le monde,Après avoir morflé sur la librairie jpeg, que j'ai fini par comprendre après moults désagréments. je m'attaque au format bmp.Je Problème avec TransparentBlt [ par NAVIE ] Bonjour, j'écris ce message au sujet d'une fonction appellée: TransparentBlt(). Celle ci est pratique pour dessiner un bitmap toutefois je n'arrive pa probleme d'exécution avec vc++, c'est urgent [ par sousou_one ] bonjour à tous,j'ai probleme au niveau de l'execution d'un programme sous visual c++, il me donne lemessage d'erreur :  libbmp_write.exe a rencontr&#2 Convertion d'un bitmap 8 bits en un bitmal 24 bits [ par SauCisS ] Bonjour, J'ai parcouru ce forum pour chercher ma réponse, mais sans succès. Alors voici mon problème : Comment à partir d'une image BMP 8 bits niv chargement dynamique d'image (bitmap ?) [ par Gendal67 ] Bonsoir,J'aimerai savoir si une application peut charger autre chose qu'une image bmp comme une image jpg....genre comme :BMP BITMAP DISCARDABLE "lol.


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

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 : 4,150 sec (3)

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