mostrar imagenes jpg

10/07/2003 - 02:50 por jujo | Informe spam
Hola grupo


Alguien puede decirme como puedo mostrar imagenes jpg que estan en el disco
duro? Con los bmp no tengo
problemas, pero necesito que la imagen sean jpgs

Gracias.

Preguntas similare

Leer las respuestas

#1 Rodrigo Corral González
10/07/2003 - 23:57 | Informe spam
La mejor manera que tiene de hacer eso, es usar el nuevo API GDI+, facilita
mucho la vida para trabajar con formatos graficos distintos de bmp. Tienes
muchas información en la MSDN. Necesitaras descargar un SDK actualizado, si
estas usando VC++ 6.0.

Un saludo.
Rodrigo Corral González
Respuesta Responder a este mensaje
#2 JUJO
17/07/2003 - 10:51 | Informe spam
Gracias, va muy bien es lo que buscaba



Un cordial saludo.
____________________________________________________________________________
Juan José Gómez Barroso

Ingeniero de Sistemas. Cherrytel Comunicaciones S.L.



"Sergio" escribió en el mensaje
news:
Usa la siguiente clase, me la pasaron en este foro y funciona muy bien.

////////////////////////////////////////////////////////////////
// MSDN Magazine -- October 2001
// If this code works, it was written by Paul DiLascia.
// If not, I don't know who wrote it.
// Compiles with Visual C++ 6.0 for Windows 98 and probably Windows 2000
too.
// Set tabsize = 3 in your editor.
//
#pragma once
#include <atlbase.h>
#include <afxpriv2.h>

//////////////////
// Picture object--encapsulates IPicture
//
class CPicture
{
public:
CPicture();
~CPicture();

// Load frm various sosurces
BOOL Load(UINT nIDRes);
BOOL Load(LPCTSTR pszPathName);
BOOL Load(CFile& file);
BOOL Load(CArchive& ar);
BOOL Load(IStream* pstm);

// render to device context
BOOL Render(CDC* pDC, CRect rc=CRect(0,0,0,0), LPCRECT prcMFBounds=NULL)
const;

CSize GetImageSize(CDC* pDC=NULL) const;

operator IPicture*() { return m_spIPicture;}

void GetHIMETRICSize(OLE_XSIZE_HIMETRIC& cx, OLE_YSIZE_HIMETRIC& cy)


const
{
cx = cy = 0;
const_cast<CPicture*>(this)->m_hr = m_spIPicture->get_Width(&cx);
ASSERT(SUCCEEDED(m_hr));
const_cast<CPicture*>(this)->m_hr = m_spIPicture->get_Height(&cy);
ASSERT(SUCCEEDED(m_hr));
}

void Free()
{
if (m_spIPicture)
{
m_spIPicture.Release();
}
}

protected:
CComQIPtr<IPicture>m_spIPicture; // ATL smart pointer to IPicture
HRESULT m_hr; // last error code
};


////////////////////////////////////////////////////////////////
// MSDN Magazine -- October 2001
// If this code works, it was written by Paul DiLascia.
// If not, I don't know who wrote it.
// Compiles with Visual C++ 6.0 for Windows 98 and probably Windows 2000
too.
// Set tabsize = 3 in your editor.
//
#include "StdAfx.h"
#include "Picture.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

////////////////////////////////////////////////////////////////
// CPicture implementation
//

CPicture::CPicture()
{
}

CPicture::~CPicture()
{
}

//////////////////
// Load from resource. Looks for "IMAGE" type.
//
BOOL CPicture::Load(UINT nIDRes)
{
// find resource in resource file
HINSTANCE hInst = AfxGetResourceHandle();
HRSRC hRsrc = ::FindResource(hInst,
MAKEINTRESOURCE(nIDRes),
"IMAGE"); // type
if (!hRsrc)
return FALSE;

// load resource into memory
DWORD len = SizeofResource(hInst, hRsrc);
BYTE* lpRsrc = (BYTE*)LoadResource(hInst, hRsrc);
if (!lpRsrc)
return FALSE;

// create memory file and load it
CMemFile file(lpRsrc, len);
BOOL bRet = Load(file);
FreeResource(hRsrc);

return bRet;
}

//////////////////
// Load from path name.
//
BOOL CPicture::Load(LPCTSTR pszPathName)
{
CFile file;
if (!file.Open(pszPathName, CFile::modeRead|CFile::shareDenyWrite))
return FALSE;
BOOL bRet = Load(file);
file.Close();
return bRet;
}

//////////////////
// Load from CFile
//
BOOL CPicture::Load(CFile& file)
{
CArchive ar(&file, CArchive::load | CArchive::bNoFlushOnDelete);
return Load(ar);
}

//////////////////
// Load from archive--create stream and load from stream.
//
BOOL CPicture::Load(CArchive& ar)
{
CArchiveStream arcstream(&ar);
return Load((IStream*)&arcstream);
}

//////////////////
// Load from stream (IStream). This is the one that really does it: call
// OleLoadPicture to do the work.
//
BOOL CPicture::Load(IStream* pstm)
{
Free();
HRESULT hr = OleLoadPicture(pstm, 0, FALSE, IID_IPicture,
(void**)&m_spIPicture);
ASSERT(SUCCEEDED(hr) && m_spIPicture);
return TRUE;
}

//////////////////
// Render to device context. Covert to HIMETRIC for IPicture.
//
BOOL CPicture::Render(CDC* pDC, CRect rc, LPCRECT prcMFBounds) const
{
ASSERT(pDC);

if (rc.IsRectNull())
{
CSize sz = GetImageSize(pDC);
rc.right = sz.cx;
rc.bottom = sz.cy;
}
long hmWidth,hmHeight; // HIMETRIC units
GetHIMETRICSize(hmWidth, hmHeight);
m_spIPicture->Render(*pDC, rc.left, rc.top, rc.Width(), rc.Height(),
0, hmHeight, hmWidth, -hmHeight, prcMFBounds);

return TRUE;
}

//////////////////
// Get image size in pixels. Converts from HIMETRIC to device coords.
//
CSize CPicture::GetImageSize(CDC* pDC) const
{
if (!m_spIPicture)
return CSize(0,0);

LONG hmWidth, hmHeight; // HIMETRIC units
m_spIPicture->get_Width (&hmWidth);
m_spIPicture->get_Height(&hmHeight);
CSize sz(hmWidth,hmHeight);
if (pDC==NULL)
{
CWindowDC dc(NULL);
dc.HIMETRICtoDP(&sz); // convert to pixels
}
else
{
pDC->HIMETRICtoDP(&sz);
}
return sz;
}

La forma de usarla es la siguente:
Te montas un frame en el formulario y le pasas a la funcion load el path


de
la imagen, y a la funcion render el DC del frame, un CRect con los datos


del
frame y fuera. Funciona con gifs y jpegs


email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida