begin process at 2012 05 29 15:11:26
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Au secours

 > 

Pb affichage bmp envga c/asm


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

Pb affichage bmp envga c/asm

lundi 15 novembre 2004 à 18:08:38 | Pb affichage bmp envga c/asm

030417

Bonjour à tous,
Je suis en train d'essayer d'afficher un bmp en c avec asm sous dos en vga (13h) . j'utilise comme compilateur borland c++ 3.0, mais je ne pense pas que cela vienne du compilateur.
j'utilise une structure pour ramener les parametres de l'image(fonction LitParam), elle fonctionne, car j'arrive à les afficher.

De même pour ma fonction de remplissage du tableau contenant l'image(LireTab8)

Bref, ces routines fonctionnaient sous windows. de plus, même quand je définis une constante (Col) pour afficher une couleur, rien ne ne passe à l'écran. cela ne vient donc pas du tableau image.
Peut être cela est il dû au fait que dos est en 16 bits au lieu de 32, mais il m'a semblé etre assez vigilant à ce niveau.

Y a t-il quelqu'un susceptible de m'éclairer de sa lanterne bienveillante??
Merci d'avance.
Philippe

// I N C L U D E S ///////////////////////////////////////////////////////////

#include <conio.h>
#include <stdio.h>
#include <process.h>
#include <alloc.h>
#include <malloc.h>
#include <dos.h>
#include <mem.h>
#include <string.h>
// D E F I N E S ////////////////////////////////////////////////////////////

#define MODE13H 0x13
#define TEXT_MODE 0x03

typedef struct{
char Nom[10];
int Hauteur;
int Largeur;
int Offset;
int NbCouleurs;
}ParamBMP;

ParamBMP Fichier; //structure contenant les parametres de l'image.

////////////////////////////////////////////////////////////////////////////

void Video_Mode(int vmode);
void Draw_Sprite(int X, int Y,ParamBMP *Fich,unsigned char ** pImage);

void LitPal();
void LireTab8(ParamBMP * Fich,unsigned char **Tab);
void LireDonnees(ParamBMP * Fich);

void WriteRGB(unsigned char couleur, unsigned char rouge,
unsigned char vert, unsigned char bleu);


////////////////////////////////////////////////////////////////////////////

unsigned char far *video_buffer = (char far *)0xA0000000L;
unsigned char far *offscreen_buffer = NULL;



unsigned char ** Image; //pointeur du Tableau contenat l'image

int i,j;


void main(void) {

Video_Mode(MODE13H);

LireDonnees(&Fichier);//ramene les données dans la structure Fichier

LitPal();//génère la palette

Image=(unsigned char**)malloc((Fichier.Hauteur)*sizeof(unsigned char*)); //création dynamique
for(i=0;i<(Fichier.Hauteur);i++) //du tableau
Image[i]=(unsigned char*)malloc((Fichier.Largeur)*sizeof(unsigned char)); //contenant l'image


LireTab8(&Fichier,Image);//remplissage du tableau image

Draw_Sprite(5,5,Image); //affichage NE MARCHE PAS...mais routine semble correcte...
getch();

for (i=0;i<Fichier.Hauteur;i++)//liberation tableau image
free(Image[i]);
free(Image);

Video_Mode(TEXT_MODE);
}

/////////////////////////////////////////////////////////////////////////////
// VideoMode : Lance le mode 13h ou texte //
/////////////////////////////////////////////////////////////////////////////

void Video_Mode(int vmode) {
asm mov ah, 0
asm mov al, BYTE PTR vmode
asm int 10h
}
/////////////////////////////////////////////////////////////////////////////
// WriteRGB : Etablit une nouvelle couleur dans la palette //
/////////////////////////////////////////////////////////////////////////////

void WriteRGB(unsigned char couleur, unsigned char rouge,
unsigned char vert, unsigned char bleu)
{
outportb(0x03C8, couleur); // Entre le num?ro de la couleur ? modifier dans
// le port hex:0x3C8 (dec:968)
outportb(0x03C9, rouge); // Entre sa composante rouge
outportb(0x03C9, vert); // Entre sa composante vert
outportb(0x03C9, bleu); // Entre sa composante bleu
}


/////////////////////////////////////////////////////////////////////////////
// Affiche Un Sprite //
/////////////////////////////////////////////////////////////////////////////

void Draw_Sprite(int X, int Y,ParamBMP *Fich,unsigned char ** pImage)

{

asm{
mov ax, 0a000h ;//Met dans es l'adresse
mov es, ax ;//du segment video
}

unsigned char Col;

for (i=Y; i<Y+Fich->Hauteur; i++){
for (j=X; j<X+Fich->Largeur; j++){

Col=pImage[i][j];

asm{ ;
mov ax,i ;
shl ax,6 ;//calculs pour mettre le point au bon endroit
mov di,ax ;
shl ax,2 ;
add di,ax ;
add di,j ;//===>ajout de l'abscisse...

mov al,Col ;//la couleur est stockée dans al
mov Byte Ptr es:[di],al ;//et est placée au bon endroit du segment video
}
}
}
};

////////////////////////////////////////////////////////////////////////////////
// LireDonnees //
////////////////////////////////////////////////////////////////////////////////


void LireDonnees(ParamBMP * Fich)
{
FILE * pFichierLu;

pFichierLu=fopen ("image8bit.bmp","rb");

fseek(pFichierLu,10,SEEK_SET);
fread(&Fich->Offset,1,2,pFichierLu);//1,4

fseek(pFichierLu,18,SEEK_SET);

fread(&Fich->Largeur,1,2,pFichierLu);//1,4
fseek(pFichierLu,2,SEEK_CUR);
fread(&Fich->Hauteur,1,2,pFichierLu);//1,4
fseek(pFichierLu,2,SEEK_CUR);
fread(&Fich->NbCouleurs,1,2,pFichierLu);1,2

fclose(pFichierLu);
return;
}


////////////////////////////////////////////////////////////////////////////////
// LireTab8 //
////////////////////////////////////////////////////////////////////////////////


void LireTab8(ParamBMP * Fich,unsigned char **Tab)
{
FILE * pFichierLu;
unsigned char pix;

pFichierLu=fopen("image8bit.bmp","rb");

j=0;

int NumLigne=(Fich->Hauteur)-1;
int NumCol=0;
fseek(pFichierLu,Fich->Offset,SEEK_SET); //54+1024

while (j<(Fich->Hauteur)*(Fich->Largeur))
{
if (NumCol>=(Fich->Largeur)){
NumLigne=NumLigne-1;
NumCol=0;
}
fread (&pix,1,1,pFichierLu);
Tab[NumLigne][NumCol]=pix;

NumCol++;
j++;
}
fclose(pFichierLu);
return;
}


////////////////////////////////////////////////////////////////////////////////
// LirePalette //
////////////////////////////////////////////////////////////////////////////////


void LitPal()
{

unsigned char TabTemp0;
unsigned char TabTemp1;
unsigned char TabTemp2;

i=0;
FILE * pFichierLu;

pFichierLu=fopen ("image8bit.bmp","rb");
fseek(pFichierLu,54,SEEK_SET);

while (i<256){
fread(&TabTemp0,1,1,pFichierLu);//Lecture des données
fread(&TabTemp1,1,1,pFichierLu);//Lecture des données
fread(&TabTemp2,1,1,pFichierLu);//Lecture des données
fseek(pFichierLu,1,SEEK_CUR);

WriteRGB(i,TabTemp2,TabTemp1,TabTemp0);
i++;
}

fclose(pFichierLu);
return;
}


Cette discussion est classée dans : void, char, unsigned, fich, pfichierlu


Répondre à ce message

Sujets en rapport avec ce message

Probleme avec une liaison serie [ par xtrememan ] Voila je dois effectuer une reception de trame avec une liaison serie par le biais d'un programme en C. J'ai reussis l'emission,mais je reste bloquer methode system() [ par sperate ] Bonjour,je code sur visual studio 2005 une simple application en mode console.j'utilise la methode "system()" pour envoyer des commandes simples genre conjugaison en c++ [ par abdelali62 ] Bonsoir tt le monde c'est mon premier programme en c++ j'ai trouve une difficulter a implante le code de la fonction main mais je vais pas besser les Protocole OneWire [ par TupaShakur ] Bonjour à tous, Je développe une carte à base de pic18f2455 qui sert à gérer des iButton Voila dix jours que je me prends la tête avec ce protocole Programmation C : 2 unsigned char dans 1 unsigned int. [ par romain60112 ] Bonjours a tous, J'ai un petit soucis pour stocker 2 unsigned char dans 1 unsigned int. Je dispose de : un tableau d'unsigned int : unsigned int con RS232 ou RS485 dial entre 2 pics [ par Pat2903 ] Bonjour je suis en projet pour crée un dialogue RS485 entre deux pics. Mon souci c'est que j'utilise MPLAB et le Compilateur C18. j'utilise la library Problem lecture/ecriture fichier bmp [ par Laurdoue ] Bonjour, je suis en train de lire et écrire avec une image en bmp ma fonction d'écriture et de lecture fonctionne bien uniquement avec des image de di aider moi a compiler mon programme en devC++ [ par samissam ] bonjour, je demande d'aide sur les arbres binaire car je travaille dessus: j'ai fait un code en Dev C++ dont le but de lire et extraire les donnée Convertir unsigned char en string^ [ par elise42 ] Bonjour à tous, je code en C++ et je cherche à convertir un unsigned char Buffer_Envoi en un string ^Trame. Quelqu'un aurait il une idée? Merci d'a


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

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