begin process at 2012 05 29 08:42:12
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Windows

 > 

DirectX

 > 

[HELP]DirectShow : SampleGrabber + libjpeg


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

[HELP]DirectShow : SampleGrabber + libjpeg

dimanche 14 mars 2010 à 12:39:48 | [HELP]DirectShow : SampleGrabber + libjpeg

shyne99

Bonjour,

Voila je modifie le programme Playcap fourni dans la SDK de DirectShow. Ce programme creer un graph afin de recuperer le flux video de la caméra et l'affiche a l'ecran.

Je l'ai modifier afin d'y incorporer la possibilité de faire une capture d'ecran au format BMP ou JPG en utilisant l'interface ISampleGrabber. L'enregistrement au format BMP fonctionne sans problème. Mon soucis est dans l'enregistrement au format jpeg. Voici le code que j'utilise :
Code C/C++ :
long nBufferSize = am_media_type.lSampleSize;
	JSAMPLE *JBuffer = (JSAMPLE*)malloc(nBufferSize);
	long *pBuffer = (long *)malloc(nBufferSize);

	// grab image data.
	pSampleGrabber->GetCurrentBuffer(&nBufferSize, (long *)pBuffer);

	memcpy((void*)&JBuffer,(void*)&pBuffer, sizeof(pBuffer));
	


	const char filename[] = "test.jpg";
	int quality = 100;

	
  struct jpeg_compress_struct cinfo;
  
  struct jpeg_error_mgr jerr;
  /* More stuff */
  FILE * outfile;		/* target file */
  JSAMPROW row_pointer[1];	/* pointer to JSAMPLE row[s] */
  int row_stride;		/* physical row width in image buffer */



  
  cinfo.err = jpeg_std_error(&jerr);

  jpeg_create_compress(&cinfo);

 
  if ((outfile = fopen(filename, "wb")) == NULL) {
    fprintf(stderr, "can't open %s\n", filename);
    exit(1);
  }
  jpeg_stdio_dest(&cinfo, outfile);

  
 
  cinfo.image_width = pVideoInfoHeader->bmiHeader.biWidth; 	
  cinfo.image_height = pVideoInfoHeader->bmiHeader.biHeight;
  cinfo.input_components = 3;		/* # of color components per pixel */
  cinfo.in_color_space = JCS_RGB; 	/* colorspace of input image */
 
  jpeg_set_defaults(&cinfo);
  
  jpeg_set_quality(&cinfo, quality, TRUE /* limit to baseline-JPEG values */);

  
  jpeg_start_compress(&cinfo, TRUE);


  row_stride = cinfo.image_width * 3;	/* JSAMPLEs per row in image_buffer */

  while (cinfo.next_scanline < cinfo.image_height) {
  
    row_pointer[0] = & JBuffer[cinfo.next_scanline * row_stride];
  (void) jpeg_write_scanlines(&cinfo, row_pointer, 1);
  }



  jpeg_finish_compress(&cinfo);

  fclose(outfile);




  jpeg_destroy_compress(&cinfo);

	



Je Jpg que je recupere est lisible mais il manque la composante rouge...
Je pense que cela vient du faite que le buffer que GetCurrentBuffer me donne est de type LONG alors que le format JSAMPLE du buffer requis par la libjpeg est au format unsigned char.
Je ne sais pas comment convertir ce buffer de long vers unsigned char....

Si quelqu'un voit comment rendre mon code fonctionnel je lui en serai tres reconnaissant .

Merci d'avance.


Cette discussion est classée dans : long, image, row, jpeg, cinfo


Répondre à ce message

Sujets en rapport avec ce message

Librairie jpeg et bug : user breakpoint called from code 0x7c911230 [ par Ayla_21 ] Bonjour tout le mondeaprès des jours et des jours de bataille acharnée avec la librairie Jpeg, j'ai réussi à l'installer et à débugger quelques lignes Intégrer une image JPEG dans une Boite de dialogue en MFC [ par picinounours51 ] Salut,Je voudrais savoir comment on crée une boite de dialogue MFC et intégrer une image JPEG dans celle-ci.J'ai essayé de comprendre en lisant différ Obtenir un fichier Jpeg en sortie, à la place de la fenetre glut [ par gilimcce ] Salut à tous :J'ai quelques soucis conceptuels quant à l'enregistrement d'images. Cad : je modélise un objet 3D, et je dois avoir la possibilité soit Image Jpeg( urgent) [ par aurelien070 ] J'ai créer mon image et en fait je dois recuperer des points sur une base de .donnée)!Ensuite je les stockes dans un fichier( .txt)du style (x1=12; y1 Afficher une image Jpeg dans une fenêtre (en fond) [ par JayC ] Salut !J'essaye d'afficher une image dans mon application en VC++ (j'utilise VC++ 6.0) et je sais vraiment pas comment faire.En fait ce que je voudrai Control Picture [ par Xentor609 ] Salut,Je voudrais afficher une image(jpeg ou bmp), dans le controle picture d'une dialogbox.J'arrive a afficher une image de type Jpeg, BMp ou gif ave Transformer une image JPEG en BMP [ par FLOX ] Bonjour à tous,Auriez vous un source me permettant de transformer une image JpEG en BMP. Tout cela d'une manière simple et compréhensive pour un début HELP ME !!! Passer une image JPEG en BMP. Projet de fin d'année [ par FLOX ] Bonjour à tous,Auriez vous un source me permettant de transformer une image JPEG en BMP. Tout cela d'une manière simple et compréhensive pour un début lecture d image au format jpeg [ par a-sophie ] Salut,Je souhaite lire et sauvegarder des images au format jpeg avec visual c++ .Si jamais quelqu un a des conseils ou des pistes a me donner, ce sera kdevelop avec jpeg [ par michelA ] michelAje travaille sur un projet son et image. J'ai fini la partie son et commence la partie image. Je suis sous linux Mandrake, aujourd'hui la 9.2.


Nos sponsors


Sondage...

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,406 sec (3)

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