blob: 2ac89bf71176fc85a9ff93d3f446d2cf00dd42e9 [file] [log] [blame]
Alexandre Julliard8d24ae61994-04-05 21:42:43 +00001/*
2 * GDI bitmap definitions
3 *
Alexandre Julliard3a5816f1994-12-27 14:11:53 +00004 * Copyright 1993, 1994 Alexandre Julliard
Alexandre Julliard8d24ae61994-04-05 21:42:43 +00005 */
6
Alexandre Julliard7cbe6571995-01-09 18:21:16 +00007#ifndef __WINE_BITMAP_H
8#define __WINE_BITMAP_H
Alexandre Julliard8d24ae61994-04-05 21:42:43 +00009
Alexandre Julliard7cbe6571995-01-09 18:21:16 +000010#include "gdi.h"
Alexandre Julliardb1bac321996-12-15 19:45:59 +000011
Patrik Stridvallb87fe2e1999-04-01 08:16:08 +000012struct tagGDI_BITMAP_DRIVER;
Alexandre Julliard642d3131998-07-12 19:29:36 +000013
Huw D M Davies87f87bf1998-10-28 09:53:53 +000014/* Flags used for BitmapBits. We only use the first two at the moment */
15
16#define DDB_SET 1
17#define DDB_GET 2
18#define DDB_COPY 4
19#define DDB_SETWITHFILLER 8
20
Alexandre Julliard7cbe6571995-01-09 18:21:16 +000021 /* GDI logical bitmap object */
Huw D M Davies87f87bf1998-10-28 09:53:53 +000022typedef struct tagBITMAPOBJ
Alexandre Julliard7cbe6571995-01-09 18:21:16 +000023{
24 GDIOBJHDR header;
Patrik Stridvallb87fe2e1999-04-01 08:16:08 +000025 BITMAP bitmap;
26 SIZE size; /* For SetBitmapDimension() */
Alexandre Julliarda08e2cf2000-03-28 13:37:50 +000027 const struct tagDC_FUNCS *funcs; /* DC function table */
28 void *physBitmap; /* ptr to device specific data */
Alexandre Julliarda845b881998-06-01 10:44:35 +000029 /* For device-independent bitmaps: */
Patrik Stridvallb87fe2e1999-04-01 08:16:08 +000030 DIBSECTION *dib;
Alexandre Julliard7cbe6571995-01-09 18:21:16 +000031} BITMAPOBJ;
Alexandre Julliard3a5816f1994-12-27 14:11:53 +000032
Patrik Stridvallb87fe2e1999-04-01 08:16:08 +000033typedef struct tagBITMAP_DRIVER
34{
35 INT (*pSetDIBits)(struct tagBITMAPOBJ *,struct tagDC *,UINT,UINT,LPCVOID,const BITMAPINFO *,UINT,HBITMAP);
36 INT (*pGetDIBits)(struct tagBITMAPOBJ *,struct tagDC *,UINT,UINT,LPVOID,BITMAPINFO *,UINT,HBITMAP);
37 VOID (*pDeleteDIBSection)(struct tagBITMAPOBJ *);
38} BITMAP_DRIVER;
39
40extern BITMAP_DRIVER *BITMAP_Driver;
41
Alexandre Julliard7cbe6571995-01-09 18:21:16 +000042 /* objects/bitmap.c */
Alexandre Julliard77b99181997-09-14 17:17:23 +000043extern INT16 BITMAP_GetObject16( BITMAPOBJ * bmp, INT16 count, LPVOID buffer );
Alexandre Julliarda3960291999-02-26 11:11:13 +000044extern INT BITMAP_GetObject( BITMAPOBJ * bmp, INT count, LPVOID buffer );
45extern BOOL BITMAP_DeleteObject( HBITMAP16 hbitmap, BITMAPOBJ * bitmap );
Alexandre Julliarda3960291999-02-26 11:11:13 +000046extern INT BITMAP_GetWidthBytes( INT width, INT depth );
Alexandre Julliarda3960291999-02-26 11:11:13 +000047extern HBITMAP BITMAP_CopyBitmap( HBITMAP hbitmap );
Alexandre Julliard7cbe6571995-01-09 18:21:16 +000048
49 /* objects/dib.c */
Alexandre Julliard7ff1c411997-05-25 13:58:18 +000050extern int DIB_GetDIBWidthBytes( int width, int depth );
Huw D M Davies608629b1999-04-18 12:07:00 +000051extern int DIB_GetDIBImageBytes( int width, int height, int depth );
Huw D M Davies56166a61999-04-19 16:45:24 +000052extern int DIB_BitmapInfoSize( const BITMAPINFO * info, WORD coloruse );
Huw D M Davies87f87bf1998-10-28 09:53:53 +000053extern int DIB_GetBitmapInfo( const BITMAPINFOHEADER *header, DWORD *width,
54 int *height, WORD *bpp, WORD *compr );
Ove Kaaven8b9f3382000-04-29 16:47:07 +000055extern HBITMAP DIB_CreateDIBSection( HDC hdc, BITMAPINFO *bmi, UINT usage, LPVOID *bits,
56 HANDLE section, DWORD offset, DWORD ovr_pitch );
Alexandre Julliarda3960291999-02-26 11:11:13 +000057extern void DIB_UpdateDIBSection( DC *dc, BOOL toDIB );
Alexandre Julliard642d3131998-07-12 19:29:36 +000058extern void DIB_DeleteDIBSection( BITMAPOBJ *bmp );
59extern void DIB_SelectDIBSection( DC *dc, BITMAPOBJ *bmp );
Noel Borthwickd05b7be1999-09-20 15:42:47 +000060extern HGLOBAL DIB_CreateDIBFromBitmap(HDC hdc, HBITMAP hBmp);
Alexandre Julliard7cbe6571995-01-09 18:21:16 +000061
62#endif /* __WINE_BITMAP_H */