ReactOS 0.4.15-dev-8236-g99f0937
alphablend.c File Reference
#include <windows.h>
#include <string.h>
Include dependency graph for alphablend.c:

Go to the source code of this file.

Macros

#define AC_SRC_ALPHA   (0x1)
 

Functions

BOOL WINAPI GdiAlphaBlend (HDC hdcDst, int xDst, int yDst, int widthDst, int heightDst, HDC hdcSrc, int xSrc, int ySrc, int widthSrc, int heightSrc, BLENDFUNCTION blendFunction)
 
LRESULT CALLBACK MainWndProc (HWND HWnd, UINT Msg, WPARAM WParam, LPARAM LParam)
 
int APIENTRY WinMain (HINSTANCE HInstance, HINSTANCE HPrevInstance, LPTSTR lpCmdLine, int nCmdShow)
 
BOOL ConvertBitmapTo32Bpp (HDC hDC, BITMAP *bmp)
 

Variables

HINSTANCE HInst
 
const charWndClassName = "GMainWnd"
 
BITMAP bmp
 
LPCSTR filename = TEXT("lena.bmp")
 
HDC HMemDC = NULL
 
HDC HMemDC2 = NULL
 
HBITMAP HOldBmp = NULL
 
PVOID pBmpBits = NULL
 
HBITMAP H32BppBitmap = NULL
 
BITMAPINFO bmpi
 

Macro Definition Documentation

◆ AC_SRC_ALPHA

#define AC_SRC_ALPHA   (0x1)

Definition at line 9 of file alphablend.c.

Function Documentation

◆ ConvertBitmapTo32Bpp()

BOOL ConvertBitmapTo32Bpp ( HDC  hDC,
BITMAP bmp 
)

Definition at line 70 of file alphablend.c.

71{
72 ZeroMemory(&bmpi, sizeof(BITMAPINFO));
74 bmpi.bmiHeader.biWidth = bmp->bmWidth;
75 bmpi.bmiHeader.biHeight = bmp->bmHeight;
81 if(H32BppBitmap)
82 {
83 HBITMAP bmpalpha;
85 BitBlt(hDC, 0, 0, bmp->bmWidth, bmp->bmHeight, HMemDC, 0, 0, SRCCOPY);
86
87 /* load and apply alpha channel */
89 0, 0, 0);
90 if(bmpalpha)
91 {
92 COLORREF *col = pBmpBits;
93 int x, y;
94 HDC hdcTemp = CreateCompatibleDC(NULL);
95 if(!hdcTemp)
96 {
97 DeleteObject(bmpalpha);
98 return FALSE;
99 }
100 SelectObject(hdcTemp, bmpalpha);
101
102 for(y = 0; y < bmp->bmHeight; y++)
103 {
104 for(x = 0; x < bmp->bmWidth; x++)
105 {
106 COLORREF Color = (COLORREF)GetRValue(GetPixel(hdcTemp, x, y)) << 24;
107 *col++ |= Color;
108 }
109 }
110
111 DeleteObject(bmpalpha);
112 DeleteDC(hdcTemp);
113 return TRUE;
114 }
115 return FALSE;
116 }
117 return FALSE;
118}
static HDC hDC
Definition: 3dtext.c:33
DWORD GetPixel(LPDIRECTDRAWSURFACE7 Surface, UINT x, UINT y)
Definition: blt.cpp:2
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
static VOID BitBlt(_In_ ULONG Left, _In_ ULONG Top, _In_ ULONG Width, _In_ ULONG Height, _In_reads_bytes_(Delta *Height) PUCHAR Buffer, _In_ ULONG BitsPerPixel, _In_ ULONG Delta)
Definition: common.c:57
#define BI_RGB
Definition: precomp.h:56
#define GetRValue(quad)
Definition: precomp.h:73
pKey DeleteObject()
GLint GLint GLint GLint GLint x
Definition: gl.h:1548
GLint GLint GLint GLint GLint GLint y
Definition: gl.h:1548
BITMAPINFO bmpi
Definition: alphablend.c:68
BITMAP bmp
Definition: alphablend.c:62
HDC HMemDC
Definition: alphablend.c:64
HBITMAP H32BppBitmap
Definition: alphablend.c:67
PVOID pBmpBits
Definition: alphablend.c:66
HINSTANCE HInst
Definition: alphablend.c:12
static HBITMAP
Definition: button.c:44
static HDC
Definition: imagelist.c:92
USHORT biBitCount
Definition: precomp.h:46
ULONG biCompression
Definition: precomp.h:47
BITMAPINFOHEADER bmiHeader
Definition: wingdi.h:1476
HBITMAP WINAPI CreateDIBSection(HDC hDC, CONST BITMAPINFO *BitmapInfo, UINT Usage, VOID **Bits, HANDLE hSection, DWORD dwOffset)
Definition: bitmap.c:245
#define ZeroMemory
Definition: winbase.h:1712
DWORD COLORREF
Definition: windef.h:300
#define DIB_RGB_COLORS
Definition: wingdi.h:367
HGDIOBJ WINAPI SelectObject(_In_ HDC, _In_ HGDIOBJ)
Definition: dc.c:1539
HDC WINAPI CreateCompatibleDC(_In_opt_ HDC hdc)
#define SRCCOPY
Definition: wingdi.h:333
struct tagBITMAPINFO BITMAPINFO
BOOL WINAPI DeleteDC(_In_ HDC)
#define IMAGE_BITMAP
Definition: winuser.h:211
#define LoadImage
Definition: winuser.h:5824
#define MAKEINTRESOURCE
Definition: winuser.h:591

Referenced by MainWndProc().

◆ GdiAlphaBlend()

BOOL WINAPI GdiAlphaBlend ( HDC  hdcDst,
int  xDst,
int  yDst,
int  widthDst,
int  heightDst,
HDC  hdcSrc,
int  xSrc,
int  ySrc,
int  widthSrc,
int  heightSrc,
BLENDFUNCTION  blendFunction 
)

◆ MainWndProc()

LRESULT CALLBACK MainWndProc ( HWND  HWnd,
UINT  Msg,
WPARAM  WParam,
LPARAM  LParam 
)

Definition at line 120 of file alphablend.c.

122{
123 switch (Msg)
124 {
125 case WM_CREATE:
126 {
127 /* create a memory DC */
129 if (HMemDC)
130 {
131 /* load a bitmap from file */
132 HBITMAP HBmp =
133 /* static_cast<HBITMAP> */(
135 0, 0, 0)
136 );
137 if (HBmp)
138 {
139 /* extract dimensions of the bitmap */
140 GetObject(HBmp, sizeof(BITMAP), &bmp);
141
142 /* associate the bitmap with the memory DC */
143 /* HOldBmp = static_cast<HBITMAP> */
145 );
148 {
150 return 0;
151 }
152 }
153 }
154 }
155 case WM_PAINT:
156 {
157 PAINTSTRUCT ps;
159 HDC Hdc = BeginPaint(HWnd, &ps);
160#if 0
161 try
162#endif
163 {
164
169
170 BitBlt(Hdc, 100, 90,
171 bmp.bmWidth, bmp.bmHeight,
172 HMemDC2, 0, 0,
173 SRCCOPY);
174 GdiAlphaBlend(Hdc, 0, 0, bmp.bmWidth, bmp.bmHeight,
175 HMemDC2, 0, 0, bmp.bmWidth, bmp.bmHeight,
176 BlendFunc);
177 GdiAlphaBlend(Hdc, bmp.bmWidth - 15, 10, bmp.bmWidth / 2, bmp.bmHeight / 2,
178 HMemDC2, 0, 0, bmp.bmWidth, bmp.bmHeight,
179 BlendFunc);
180
183
184 GdiAlphaBlend(Hdc, 140, 200, bmp.bmWidth, bmp.bmHeight,
185 HMemDC2, 0, 0, bmp.bmWidth, bmp.bmHeight,
186 BlendFunc);
187 GdiAlphaBlend(Hdc, 20, 210, (bmp.bmWidth / 3) * 2, (bmp.bmHeight / 3) * 2,
188 HMemDC2, 0, 0, bmp.bmWidth, bmp.bmHeight,
189 BlendFunc);
190 }
191#if 0
192 catch (...)
193 {
194 EndPaint(HWnd, &ps);
195 }
196#endif
197 EndPaint(HWnd, &ps);
198 break;
199 }
200 case WM_DESTROY:
201 {
202 /* clean up */
206
208 return 0;
209 }
210 }
211 return DefWindowProc(HWnd, Msg, WParam, LParam);
212}
struct @1643 Msg[]
static const BLENDFUNCTION BlendFunc
Definition: general.c:34
HDC HMemDC2
Definition: alphablend.c:64
BOOL ConvertBitmapTo32Bpp(HDC hDC, BITMAP *bmp)
Definition: alphablend.c:70
BOOL WINAPI GdiAlphaBlend(HDC hdcDst, int xDst, int yDst, int widthDst, int heightDst, HDC hdcSrc, int xSrc, int ySrc, int widthSrc, int heightSrc, BLENDFUNCTION blendFunction)
#define AC_SRC_ALPHA
Definition: alphablend.c:9
HBITMAP HOldBmp
Definition: alphablend.c:65
#define DefWindowProc
Definition: ros2win.h:31
Definition: bl.h:1331
BYTE BlendOp
Definition: wingdi.h:2759
BYTE BlendFlags
Definition: wingdi.h:2760
BYTE AlphaFormat
Definition: wingdi.h:2762
BYTE SourceConstantAlpha
Definition: wingdi.h:2761
#define AC_SRC_OVER
Definition: wingdi.h:1369
#define GetObject
Definition: wingdi.h:4468
#define WM_PAINT
Definition: winuser.h:1620
#define WM_CREATE
Definition: winuser.h:1608
__analysis_noreturn void WINAPI PostQuitMessage(_In_ int)
BOOL WINAPI EndPaint(_In_ HWND, _In_ const PAINTSTRUCT *)
#define WM_DESTROY
Definition: winuser.h:1609
HDC WINAPI BeginPaint(_In_ HWND, _Out_ LPPAINTSTRUCT)
HBITMAP HBmp

Referenced by WinMain().

◆ WinMain()

int APIENTRY WinMain ( HINSTANCE  HInstance,
HINSTANCE  HPrevInstance,
LPTSTR  lpCmdLine,
int  nCmdShow 
)

Definition at line 17 of file alphablend.c.

19{
20 WNDCLASS wc;
21 MSG msg;
22
23 HInst = HInstance;
24
25 memset(&wc, 0, sizeof(WNDCLASS));
26
29 wc.hInstance = HInstance;
31 /* wc.hbrBackground = reinterpret_cast<HBRUSH>(COLOR_BTNFACE + 1); */
32 wc.hbrBackground = (HBRUSH)(COLOR_BTNFACE + 1);
34
35 if (RegisterClass(&wc))
36 {
37 HWND HWnd =
39 WndClassName, TEXT("AlphaBlend Rendering Demo"),
42 0, 0, 320, 430,
44 );
45
46 if (HWnd)
47 {
48 ShowWindow(HWnd, nCmdShow);
49 UpdateWindow(HWnd);
50
51 while (GetMessage(&msg, NULL, 0, 0))
52 {
55 }
56 }
57 }
58 return 0;
59}
#define msg(x)
Definition: auth_time.c:54
#define TEXT(s)
Definition: k32.h:26
const char * WndClassName
Definition: alphablend.c:13
LRESULT CALLBACK MainWndProc(HWND HWnd, UINT Msg, WPARAM WParam, LPARAM LParam)
Definition: alphablend.c:120
#define WS_CAPTION
Definition: pedump.c:624
#define WS_OVERLAPPED
Definition: pedump.c:615
#define WS_SYSMENU
Definition: pedump.c:629
#define WS_VISIBLE
Definition: pedump.c:620
#define WS_CLIPSIBLINGS
Definition: pedump.c:618
#define memset(x, y, z)
Definition: compat.h:39
HBRUSH hbrBackground
Definition: winuser.h:3170
HINSTANCE hInstance
Definition: winuser.h:3167
HCURSOR hCursor
Definition: winuser.h:3169
UINT style
Definition: winuser.h:3163
LPCSTR lpszClassName
Definition: winuser.h:3172
WNDPROC lpfnWndProc
Definition: winuser.h:3164
TW_UINT32 TW_UINT16 TW_UINT16 MSG
Definition: twain.h:1829
#define CS_VREDRAW
Definition: winuser.h:658
BOOL WINAPI TranslateMessage(_In_ const MSG *)
BOOL WINAPI ShowWindow(_In_ HWND, _In_ int)
#define CS_HREDRAW
Definition: winuser.h:653
#define IDC_ARROW
Definition: winuser.h:687
#define CS_DBLCLKS
Definition: winuser.h:651
#define CreateWindow
Definition: winuser.h:5763
#define GetMessage
Definition: winuser.h:5799
BOOL WINAPI UpdateWindow(_In_ HWND)
#define LoadCursor
Definition: winuser.h:5821
#define RegisterClass
Definition: winuser.h:5845
#define DispatchMessage
Definition: winuser.h:5774
#define COLOR_BTNFACE
Definition: winuser.h:928
const CHAR * LPCTSTR
Definition: xmlstorage.h:193

Variable Documentation

◆ bmp

BITMAP bmp

Definition at line 62 of file alphablend.c.

Referenced by add_checksum_entry(), add_tb_button(), alpha_blend_image(), balance_data_chunk(), BitBltFromClipboard(), BookmarkToURL(), brush_fill_path(), cert_mgr_advanced_dlg_proc(), cert_mgr_dlg_proc(), cert_properties_general_dlg_proc(), COMCTL32_EnsureBitmapSize(), ConvertBitmapTo32Bpp(), DIB_CreateDIBSection(), draw_graphics(), FillBookmarkInfo(), get_bitmap_info(), get_color_format(), get_graphics_device_bounds(), get_icon_size(), GetBookmark(), GetClipboardDataDimensions(), GetNextBookmark(), HBITMAP_UserFree(), HBITMAP_UserMarshal(), HBITMAP_UserSize(), HBITMAP_UserUnmarshal(), HEADER_DrawItem(), ImageList_Add(), ImageList_AddMasked(), ImageList_LoadImageW(), ImageList_Replace(), ImageList_ReplaceIcon(), init_hierarchy_page(), LISTVIEW_SetColumnWidth(), load_stored_free_space_tree(), LoadCardBitmapsFromLibrary(), MainWndProc(), MENU_DrawBitmapItem(), MENU_GetBitmapItemSize(), NotifyArea::Paint(), StartMenuRoot::Paint(), ParseHostLine(), PictureButton::PictureButton(), prepare_alpha(), PromptForBookmarkName(), PutBookmark(), scrub_chunk(), scrub_data_extent(), select_cert_dlg_proc(), SetBookmarkDefaults(), START_TEST(), test_bitmap_font_glyph_index(), test_bmBits(), test_brush_pens(), test_CreateBitmap(), Test_CursorIcon(), test_D3DKMTCreateDCFromMemory(), test_DIB_PAL_COLORS(), test_GdiGradientFill(), test_GdipDrawImagePointsRectOnMemoryDC(), test_GdipFillRectanglesOnMemoryDCSolidBrush(), test_GdipFillRectanglesOnMemoryDCTextureBrush(), test_GdipGetVisibleClipBounds_memoryDC(), test_GetCursorFrameInfo(), test_himetric(), test_layered_window(), test_LoadIconWithScaleDown(), test_LoadImage(), test_multiframegif(), test_pic_with_stream(), test_printer_dc(), test_ps_alternate(), ui_destroy_bitmap(), User32CallOBMFromKernel(), UXTHEME_LoadImage(), UXTHEME_SelectImage(), WDML_DataHandle2Global(), WDML_Global2DataHandle(), and WriteBmLine().

◆ bmpi

BITMAPINFO bmpi

Definition at line 68 of file alphablend.c.

Referenced by ConvertBitmapTo32Bpp(), and InitLogo().

◆ filename

LPCSTR filename = TEXT("lena.bmp")

Definition at line 63 of file alphablend.c.

◆ H32BppBitmap

HBITMAP H32BppBitmap = NULL

Definition at line 67 of file alphablend.c.

Referenced by ConvertBitmapTo32Bpp().

◆ HInst

HINSTANCE HInst

Definition at line 12 of file alphablend.c.

Referenced by ConvertBitmapTo32Bpp(), MainWndProc(), and WinMain().

◆ HMemDC

HDC HMemDC = NULL

Definition at line 64 of file alphablend.c.

Referenced by ConvertBitmapTo32Bpp(), and MainWndProc().

◆ HMemDC2

HDC HMemDC2 = NULL

Definition at line 64 of file alphablend.c.

Referenced by MainWndProc().

◆ HOldBmp

HBITMAP HOldBmp = NULL

Definition at line 65 of file alphablend.c.

Referenced by MainWndProc().

◆ pBmpBits

PVOID pBmpBits = NULL

Definition at line 66 of file alphablend.c.

Referenced by ConvertBitmapTo32Bpp().

◆ WndClassName

const char* WndClassName = "GMainWnd"

Definition at line 13 of file alphablend.c.

Referenced by WinMain().