Wenn Sie mit .NET dies nicht für Sie ist ein echtes Problem, da afaik bereits PNG-Unterstützung in bauen. Sie sind?
Nach meinem Wissen werden Sie dies nicht erreichen, indem Sie einfach GDI verwenden. Es gibt eine Reihe von Optionen, bei denen Sie EINE Farbe als transparent festlegen, dann ein einfaches BMP/JPEG laden und einige BITMAP-Tricks ausführen können, aber die Verwendung von ICO/GIF wird wesentlich einfacher.
Was Sie wahrscheinlich suchen, ist ein funktionierendes GDI + Beispiel, das ein PNG mit Alphakanal verwendet? Dies ist nur ein Auszug und ich links von einem DLL Teil den ganzen Schlamassel Laden externer Funktionen aus, aber vielleicht wird diese Ihnen helfen:
static GpImage *background = NULL;
GDIPLOADIMAGEFROMSTREAM GdipLoadImageFromStream;
GDIPLUSSTARTUP GdiplusStartup;
GDIPPLUSSHUTDOWN GdiplusShutdown;
GDIPCREATEFROMHDC GdipCreateFromHDC;
GDIPDELETEGRAPHICS GdipDeleteGraphics;
GDIPDRAWIMAGEI GdipDrawImageI;
GDIPDRAWIMAGERECTI GdipDrawImageRectI;
GDIPLUS_STARTUP_INPUT GdiplusStartupInput;
void LoadPNG(GpImage **image, int resource, HMODULE hInstance)
{
HRSRC resrc;
LPSTREAM lpstr;
HGLOBAL hPng;
LPVOID fByte;
GpImage *img = NULL;
resrc = FindResource(GetModuleHandle(NULL), MAKEINTRESOURCE(resource), TEXT("PNG"));
hPng = LoadResource(GetModuleHandle(NULL), resrc);
fByte = LockResource(hPng);
lpstr = SHCreateMemStream(fByte, 200000);
GdipLoadImageFromStream(lpstr, &img);
*image = img;
}
void CreateBack(HWND hWnd)
{
HDC memDC = NULL;
HDC hdc = NULL;
RECT rect;
DeleteObject(curBack);
GetClientRect(hWnd, &rect);
hdc = GetDC(hWnd);
memDC = CreateCompatibleDC(hdc);
curBack = CreateCompatibleBitmap(hdc, rect.right, 44);
SelectObject(memDC, curBack);
/* gdiplus - background*/ {
int e = 0;
GpGraphics *g;
GdipCreateFromHDC(memDC, &g);
GdipDrawImageRectI(g, background, e, 0, 971, 44);
GdipDeleteGraphics(g);
}
DeleteObject(memDC);
ReleaseDC(hWnd, hdc);
}
Nur eine kurze Anmerkung: Diese GDI + Zeug ist wirklich CPU/Speicher-intensive aus ein paar Gründen. Obwohl Spaß habe ich diesen Ansatz zugunsten von GDI und einfachen BMPs aufgegeben.
Welche Sprache/Plattform? Welche spezielle Benutzeroberflächensteuerung? – colithium