Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > C++ Builder
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

 
 
Herramientas Buscar en Tema Desplegado
  #11  
Antiguo 28-11-2017
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.210
Poder: 22
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
No hace mucho publiqué un truco para cargar imágenes de un recurso que admitía varios formatos usando GDI+. El mensaje original en delphi y C++ se encuentra aquí:
Cargar una Imagen de un Resource RT_RCDATA con API pura y GDI+ Flat

El código es el siguiente:

El archivo de recursos RC:
Código PHP:
Imagen1 RCDATA "Imagen1.png" 
Imagen2 RCDATA "Imagen2.jpg" 
La función de carga: CreateHBITMAPFromRCDATAResurce (sobran declaraciones de APIs GDI+ pero ahí quedan por si las queréis para otros usos)
Código PHP:
#include <windows.h>

#pragma link "Gdiplus.lib"
#pragma resource "MiArchivo.res"

extern "C" {
DWORD WINAPI GdiplusStartup(ULONG_PTR *hTokenvoid *inputvoid *Output);
void  WINAPI GdiplusShutdown(ULONG_PTR token);
DWORD WINAPI GdipCreateBitmapFromHBITMAP(HBITMAP hBmpHPALETTE hPalHANDLEGBitmap);
DWORD WINAPI GdipCreateHBITMAPFromBitmap(HANDLE BmpHBITMAPhBmpDWORD BKColor);
DWORD WINAPI GdipCreateFromHDC(HDC hDCHANDLEhGraphics);
DWORD WINAPI GdipDisposeImage(HANDLE hImage);
DWORD WINAPI GdipTranslateWorldTransform(HANDLE hGraphicsfloat sxfloat syDWORD Order);
DWORD WINAPI GdipRotateWorldTransform(HANDLE hGraphicsfloat AngleDWORD Order);
DWORD WINAPI GdipDrawImage(HANDLE hGraphicsHANDLE hImagefloat sxfloat sy);
DWORD WINAPI GdipDeleteGraphics(HANDLE hGraphics);
DWORD WINAPI GdipCreateBitmapFromFile(WCHARfilenameHANDLEbitmap);
DWORD WINAPI GdipCreateHBITMAPFromBitmap(HANDLE bitmapHBITMAPhBitmapDWORD BKColor);
//DWORD WINAPI GdipCreateBitmapFromResource(HINSTANCE hInstance, WCHAR* lpBitmapName, HANDLE* GBitmap);
DWORD WINAPI GdipCreateBitmapFromStream(IStreamstreamHANDLEGBitmap);


DWORD WINAPI GdipImageRotateFlip(HANDLE hImageDWORD rfType);
}

TForm1 *Form1;

typedef struct {
  
UINT32 GdiplusVersion;
  
PVOID  DebugEventCallback;  //DebugEventProc
  
BOOL   SuppressBackgroundThread;
  
BOOL   SuppressExternalCodecs;
GdiplusStartupInput;

HBITMAP CreateHBITMAPFromRCDATAResurce(PWCHAR FileName)
{
  
PWCHAR RT_RCDATAW MAKEINTRESOURCEW(10);
  
HBITMAP hBitmap 0;
  
HANDLE GBitmap 0;
  
IStreamStream;
  
ULONG_PTR  gdiplusToken;
  
GdiplusStartupInput gdiplusStartupInput = {0};
  
gdiplusStartupInput.GdiplusVersion 1;
  if(
GdiplusStartup(&gdiplusToken, &gdiplusStartupInputNULL)) return 0;

  
HRSRC Res FindResourceW(0FileNameRT_RCDATAW);//MAKEINTRESOURCEW(10));
  
if(Res){
    
DWORD Size SizeofResource(0Res);
    
HGLOBAL hMem = ::GlobalAlloc(GMEM_MOVEABLESize);
    
LPVOID pImage = ::GlobalLock(hMem);
    
CopyMemory(pImageLockResource(LoadResource(0Res)), Size);
    ::
GlobalUnlock(hMem);
    ::
CreateStreamOnHGlobal(hMemtrue, &Stream);
    
GdipCreateBitmapFromStream(Stream, &GBitmap);
    
GdipCreateHBITMAPFromBitmap(GBitmap, &hBitmap0);
    
GdipDisposeImage(GBitmap);
    
//GlobalFree(hMem);
    
Stream->Release();
  }

  
//shutdown GDI+
  
GdiplusShutdown(gdiplusToken);

  return 
hBitmap;

Un ejemplo de uso:
Código PHP:
Image1->Picture->Bitmap->Handle CreateHBITMAPFromRCDATAResurce(L"Imagen1"); 

Saludos.
Responder Con Cita
 



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Cargar Imagenes desde un zip a un timage. javier9090 Varios 3 19-03-2012 18:20:55
dbctrlgrid imagenes con timage amo3k OOP 2 08-02-2010 19:22:36
Crear imágenes grandes con Timage BlackDaemon Gráficos 6 13-03-2009 21:09:47
cargar diferentes imagenes en un TImage huevozen C++ Builder 3 27-07-2006 09:37:17
carga de imagenes en timage jvalles Gráficos 2 15-12-2005 19:06:57


La franja horaria es GMT +2. Ahora son las 19:20:28.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi