begin process at 2012 02 11 14:23:59
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Linux

 > 

OpenGL

 > 

Programmation Matrice 2D image


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

Programmation Matrice 2D image

mercredi 12 juillet 2006 à 15:16:36 | Programmation Matrice 2D image

rojbi

Salut
Je dispose d'une image géante que je veux la copier dans plusieur buffer de petite taille :
voila le prtion de code :
Const float tableau;
BImage<float> image1(img, inputMgr);


tableau = image1.getImage();// pixels stocker en virgule dans le tableau



w1=image1.getWidth();
h1=image1.getHeight();
const float* data = (float*)malloc(sizeof(data));
data=tableau;

glTexSubImage2D(GL_TEXTURE_RECTANGLE_NV,0,0,0,w1/2,h1/2,
GL_LUMINANCE,GL_FLOAT,data);//permet d'envoyer l'image dans le memoire vidéo
Est ce que quelqu'un sais comment afficher cette image de grande taille en plusieur morceau ?
Je dois diviser le grand buffer data en plusieur buffer de petite taille mais je n'arrive pas à le faire correctement en codant ?
Merci infiniment



mercredi 12 juillet 2006 à 16:12:47 | Re : Programmation Matrice 2D image

luhtor

Réponse acceptée !
				
						malloc(sizeof(data)); <= ca me parait louche, ca fait 4 octets, c'est ce que tu veux ?
La ligne suivante me parait tout aussi louche vu la ligne précédente. A mon avis, ya un gros pb la :)

Bas deja, pour ton pb faut connaitre le nombre de byte par pixel, c'est cb ?

mercredi 12 juillet 2006 à 16:26:55 | Re : Programmation Matrice 2D image

rojbi

bonjour merci de ta reponse
Je debute en programmation...

Le buffer est :
4096*4096*SIZEOF(float32)= 67108864 Byte soit 64Mb

En d'autre terme mon probleme est de trouver une solution afin de diviser ce buffer qui contient des pixel stocker en virgule flottant 32 bit RGB
en plusieur petit buffer de 1024*1024;;
SACHANT que je recupere ce buffer en const float à l'aide pointeur tableau :
tableau = image1.getImage();//buffer contenant 4096*4096 float pixel
//W1 et h1 sont respectivement la largeur et le hauteur de la texture
Mes besoin d'aide c comment faire à partir de ce code pour arriver à afficher des buffert de 1024*1024
merci d'avance

mercredi 12 juillet 2006 à 17:08:29 | Re : Programmation Matrice 2D image

luhtor

Réponse acceptée !
Ton image est probablement (quasi sur) stocké ligne par ligne en partant du haut ou du bas (ca changera rien, au pire l'image sera a l'envers, mais ca marchera). Le pb c'est que tu veux non seulement découper ton image, mais suivant des blocs qui ne sont pas naturel pour le buffer. Mais ca reste simple.

Une ligne de ton image représente 4096 pixel soit 4096*3*sizeof(float). (3 pour RGB).
Si tu veux une image de 1024*1024, il te faut un buffer de 1024*1024*3*sizeof(float) OCTETS donc:
(Utilise l'allocation du C++ plutot que du C).

float * sous_image = new float[1024*1024*3*sizeof(float))];

Et donc ca te donne un buffer de la taille correct, faut maitenant le remplir. On va procéder par ligne avec la commande:
memcpy(buffer cible, buffer source, nombre d'octet a copier);
ou plus précisement
memcpy(void * target, const void * src, unsigned int octet) // ou un truc du genre

Donc on copie 1024 ligne de 1024 pixel:
On définie size_of_line pour une meilleur lisibilité: unsigned int size_of_line = 1024*3; C'est le nombre de floatant sur une ligne de la sous image et non le nombre d'octet. On travail en nombre de floatant puisque le pointeur (sous_image) est définie par float * et non char *.
De meme, on définie size_of_initial_line, cad le nombre de floatant sur une ligne de l'image initiale.
Admettons que l'on est
tableau de type float * qui contient l'image initiale.

for (int i = 0; i < 1024 ; i++)
{
    memcpy(&sous_image[i*size_of_line], &tableau[i*size_of_initial_line], size_of_line * sizeof(float));
}

memcpy prend en 3eme argument le nombre d'octet, or comme size_of_line est le nombre de floatant...

Donc avec ca, tu copies la première image (celle de coordonnée 0,0). Tu en as 15 autres a faire. Apres c'est juste un pb de décalage a ajouter a &tableau[X]. Par exemple pour la deuxième image, il faut "&tableau[i*size_of_initial_line + 1024*3]".

Bon j'ai ptet fait des erreurs, mais j'espère avoir expliqué relativement clairement le pb.
mercredi 12 juillet 2006 à 19:36:51 | Re : Programmation Matrice 2D image

rojbi

Merci
mercredi 12 juillet 2006 à 20:26:56 | Re : Programmation Matrice 2D image

steve_clamage

Il vaut mieux utiliser std::vector, ca sera nettement plus simple.
mercredi 12 juillet 2006 à 20:37:56 | Re : Programmation Matrice 2D image

luhtor

Qu'est ce que ca simplifie ? rien à part l'allocation.


mercredi 12 juillet 2006 à 20:43:02 | Re : Programmation Matrice 2D image

rojbi

std::vector comment on peut l'utiliser dans ce cas ?
mercredi 12 juillet 2006 à 20:54:34 | Re : Programmation Matrice 2D image

luhtor

rien de spécial, c'est juste un tableau dont tu n'as pas a te soucier de l'initialisation
mais comme tu débutes, faut pas utiliser ce genre de truc.


mercredi 12 juillet 2006 à 20:57:10 | Re : Programmation Matrice 2D image

steve_clamage

std::vector simplifie la gestion dynamique de la memoire, on ne peut pas dire que c'est rien, et dans ton new le sizeof(float) est de trop.

1 2

Cette discussion est classée dans : image, data, plusieur, float, image1


Répondre à ce message

Sujets en rapport avec ce message

Afficher une image avec gtkmm [ par naika585 ] Bijour tt l'monde !Je developpe une interface avec gtkmm.Mon pb est le suivant : je veux afficher une image avec gtkmm, mais sans passer par le nom du Horoscope (recuperer sur site) [ par Tidam ] Voila j'ai un probleme, avec mon code j'envoi une requette HTTP au serveur et il me renvoi exactement ce que je lui ai envoyé ... quelqu'un pourrait m racine niéme [ par imanedaoudi ] Salut, je cherche à calculer la racine niéme d'un float donnée (le n est float aussi:par exemple x à la puissance 0.234).est ce qu'il y a une fonction Problème avec Drawing::Image::FromStream et PictureBox [ par lacousine ] Voici le problème : J'essaye d'affecter plusieurs images arrivant d'un socket dans un picturebox. La fonction : CommencerRecevoirImage() est appelé pa Impression d'une image [ par eagleseyes ] Je fait un programme qui desine dans un objet TImage et je souhaiterais imprimer son contenu mais je me retrouve avec un dessin minuscule sur le papie classe abstraite et interface (au sens Java pas graphique :d ) en C++ [ par lulafitt ] Bonjour, Comme précisé dans le sujet quand je parle d'interface je ne parle pas d'interface graphique mais bien d'interface comme dans Java. Ceci dit Probleme de recréation [ par bordeaux ] Bonjour,je vais posé une question tout bête, mais j'ai pas réussi à y répondre tout seul :    typename IMAGE::Pointer image1(image2);    delete image1 Je sèche : types et pointeurs [ par benlustr ] Bonjour à tous, je galère depuis quelques temps pour essayer de comprendre un programme que je suis en train de revoir et d'améliorer. Actuellement, Detecteur de harris pour la detection des coins dans une image [ par samslay ] Bonjour, en fait tout est dis dans le sujet , svp je charche une personne pour m'aiderà la programmation en C++ pour le detecteur des coins nommé le f communiquer via RS232 [ par poohzu ] bonjr à ts je suis tout nouveau ds ce siteje suis aussi nouveau en Prog.je dois communiquer en language  C avec un appareil  via le port serie  Rs232


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
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 : 2,028 sec (3)

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