OVH Cloud OVH Cloud

image jpg

9 réponses
Avatar
vic
Bonjour,
j'ai besoin d'afficher une image jpg dans une application et je ne souhaite
pas utiliser de librarie comme directX. Existe t'il des sites qui expliquent
comment faire ?
Je programme en c++
Merci d'avance.

9 réponses

Avatar
Quentin Pouplard
vic wrote:
Bonjour,
j'ai besoin d'afficher une image jpg dans une application et je ne
souhaite pas utiliser de librarie comme directX. Existe t'il des sites
qui expliquent comment faire ?



Google par exemple? Cherche libjpeg par exemple.

Si tu veux des informations sur un langage en particulier, donne plus
d'info.

Au passae, DirectX ne te permet pas de faire ce genre de chose, et
heuresement c'est pas son but!


--
Quentin Pouplard (Tene/MyOE)
http://www.myoe.org | http://graff.alrj.org
Avatar
patrox
Windows lit les jpg.

OleLoadPicture.

pat.

"Quentin Pouplard" a écrit dans le message de
news:


vic wrote:
> Bonjour,
> j'ai besoin d'afficher une image jpg dans une application et je ne
> souhaite pas utiliser de librarie comme directX. Existe t'il des sites
> qui expliquent comment faire ?

Google par exemple? Cherche libjpeg par exemple.

Si tu veux des informations sur un langage en particulier, donne plus
d'info.

Au passae, DirectX ne te permet pas de faire ce genre de chose, et
heuresement c'est pas son but!


--
Quentin Pouplard (Tene/MyOE)
http://www.myoe.org | http://graff.alrj.org



Avatar
Dominique Baldo
patrox nous disait
Windows lit les jpg.

OleLoadPicture.



Dans ce cas, pourquoi la doc de la win32 SDK sur OleLoadPicture indique-
t-elle:

"Remarks:

The stream must be in BMP (bitmap), WMF (metafile), or ICO (icon)
format. "

rien sur le jpeg, gif ou png.

personnellement je me suis recompilé la libjpeg-6b qui n'est pas
spécifique à Windows (y a rien pour faire le lien avec une HBITMAP par
ex.)

pour la libjpeg-6b doit y avoir une option de compil pour que l'ordre
des couleurs soit BGR et pas RGB: il m'a fallu triturer dans un include
pour lui dire que les index de Blue Green Red était 0, 1, 2 et pas 2, 1,
0; sinon au premier coup il y a une inversion rouge-bleu, ca fait un peu
Science Fiction.
Avatar
Patrick Brunet
Bonjour You and Eve Ribaudy,


"vic" a écrit dans le message news:
3f4cbd54$0$16184$
Bonjour,
j'ai besoin d'afficher une image jpg dans une application et je ne


souhaite
pas utiliser de librarie comme directX. Existe t'il des sites qui


expliquent
comment faire ?
Je programme en c++
Merci d'avance.





Un bon code vaut mieux que de longs discours : J'ai écrit une petite classe
qui fait le boulot pour une application MFC. Ca marche notamment avec des
JPEG et des GIF, j'ai pas essayé d'autres formats. Comme vous le
remarquerez, ça repose sur un certain nombre de "undocumented (or
elliptically) features".

CPicture.h
======
#ifndef _CPicture_h_
#define _CPicture_h_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#include <atlbase.h>

class CPicture
{
private:
IPicture * _pasiPicture;
public:
inline
CPicture( void)
{
_pasiPicture = NULL;
};
inline
~CPicture( void)
{
Release();
};
inline void
Release( void)
{
if( _pasiPicture != NULL)
_pasiPicture->Release();
_pasiPicture = NULL;
};
public:
BOOL
Load( char const * pktsFile);
CSize
GetSize( void);
void
Draw( CDC * pDC,
int six = 0,
int siy = 0);
};

#endif _CPicture_h_
==================================
CPicture.cpp
========
#include "stdafx.h"
#include <afxpriv2.h> // Undocumented CArchiveStream class !

#include "CPicture.h"

////////////////////////////////////////////////////////////////////////////
/
// CPicture Implementation

BOOL
CPicture::Load /*
===============*/
(
char const * pktsFile
)
{
HRESULT hResult;
CFile oFile;

Release();
if( ! oFile.Open( pktsFile, CFile::modeRead | CFile::shareDenyWrite))
return( FALSE);
else
{
CArchive oAr( &oFile, CArchive::load |
CArchive::bNoFlushOnDelete);
CArchiveStream oStream( &oAr);

hResult = OleLoadPicture( (IStream *) &oStream, 0, FALSE,
IID_IPicture, (void * *) &_pasiPicture);
}
oFile.Close();
ASSERT( SUCCEEDED( hResult));
ASSERT( _pasiPicture != NULL);
return( TRUE);
}

CSize
CPicture::GetSize /*
==================*/
(
void
)
{
LONG w, h;
HRESULT hResult;

if( _pasiPicture == NULL)
return( CSize( 0, 0));
hResult = _pasiPicture->get_Width( &w);
ASSERT( SUCCEEDED( hResult));
hResult = _pasiPicture->get_Height( &h);
ASSERT( SUCCEEDED( hResult));
// Convert To pixels
{
CWindowDC oDC( NULL);
CSize oSize( w, h);

oDC.HIMETRICtoDP( &oSize);
return( oSize);
}
}

void
CPicture::Draw /*
===============*/
(
CDC * pDC,
int six, /* = 0 */
int siy /* = 0 */
)
{
LONG w, h;
HRESULT hResult;
CSize oSize;
CPoint oWhere;

ASSERT( pDC != NULL);
if( _pasiPicture == NULL)
return;
oSize = GetSize();
oWhere.x = six;
oWhere.y = siy;
hResult = _pasiPicture->get_Width( &w);
ASSERT( SUCCEEDED( hResult));
hResult = _pasiPicture->get_Height( &h);
ASSERT( SUCCEEDED( hResult));
hResult = _pasiPicture->Render( *pDC, oWhere.x, oWhere.y, oSize.cx, oSize.cy,
0, h, w, -h, NULL);
ASSERT( SUCCEEDED( hResult));
}

[code prévu pour fonte à pas fixe, tabs remplacés par 4 spaces]

Utilisation : Aucun include général particulier, le AfxOleInit() standard des MFC convient aussi pour COM.
La classe qui doit détenir l'image déclare un membre :

CPicture * _poPicture;

_poPicture = new CPicture;

Elle lui fait charger le fichier (Load() ) et traite les OnDraw() par invocation de Draw(). L'image
peut être changée à tout moment en refaisant un Load(). Pour la supprimer
définitivement, détruire le CPicture.


Hope It Helps.

Patrick "Zener" BRUNET
Avatar
Fred
"vic" a écrit dans le message de news:
3f4cbd54$0$16184$
Bonjour,
j'ai besoin d'afficher une image jpg dans une application et je ne


souhaite
pas utiliser de librarie comme directX. Existe t'il des sites qui


expliquent
comment faire ?



Tu vas etre oblige d'utiliser une librairie (libjpeg, devil...) et si tu
veux etre "tres windows" va voir les doc de GDI+

Je programme en c++
Merci d'avance.




Avatar
patrox
> > Windows lit les jpg.
>
> OleLoadPicture.

Dans ce cas, pourquoi la doc de la win32 SDK sur OleLoadPicture indique-
t-elle:

"Remarks:

The stream must be in BMP (bitmap), WMF (metafile), or ICO (icon)
format. "

rien sur le jpeg, gif ou png.



Un oublie de microsoft surement.

pat.
Avatar
Dominique Vaufreydaz
Bonjour,

Si tu veux des informations sur un langage en particulier, donne plus
d'info.
Au passae, DirectX ne te permet pas de faire ce genre de chose, et
heuresement c'est pas son but!



Moi j'aurais dit GDI+. Disponible sur tous les bon OS (les nouveaux)
et dispos gratos chez Microsoft... J'use et j'abuse...

Doms.
--
Impose ta chance, serre ton bonheur et va vers ton risque.
A te regarder, ils s'habitueront.
René Char, Les Matinaux.
----
http://www-prima.inrialpes.fr/Vaufreydaz/
http://slmg.imag.fr/
http://slmg-index.imag.fr/
http://TitchKaRa.free.fr/
http://logiciels.ntfaqfr.com/
Avatar
Philippe Mignard
Un exemple d'utilisation avec LibJPeg:
http://micromeg.free.fr/programmeur.html

A+

vic wrote:
Bonjour,
j'ai besoin d'afficher une image jpg dans une application et je ne souhaite
pas utiliser de librarie comme directX. Existe t'il des sites qui expliquent
comment faire ?
Je programme en c++
Merci d'avance.




Avatar
Christian ASTOR
vic wrote:

j'ai besoin d'afficher une image jpg dans une application et je ne souhaite
pas utiliser de librarie comme directX. Existe t'il des sites qui expliquent
comment faire ?



A retardement => FAQ => KB 218972