- Timestamp:
- Jan 8, 2005, 11:37:34 PM (18 years ago)
- Location:
- pwntcha/trunk
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
pwntcha/trunk/configure.ac
r432 r435 20 20 21 21 AC_CHECK_FUNCS(getopt_long) 22 23 # Use Windows? 24 AC_CHECK_HEADERS(olectl.h, 25 [ac_cv_my_have_ole="yes"], 26 [ac_cv_my_have_ole="no"]) 27 CPPFLAGS="${save_CPPFLAGS}" 28 AM_CONDITIONAL(USE_OLE, test "${ac_cv_my_have_ole}" = "yes") 22 29 23 30 # Use SDL? -
pwntcha/trunk/src
- Property svn:ignore
-
old new 4 4 .deps 5 5 pwntcha 6 pwntcha.exe
-
- Property svn:ignore
-
pwntcha/trunk/src/Makefile.am
r426 r435 2 2 3 3 bin_PROGRAMS = pwntcha 4 pwntcha_CFLAGS = $(ADDITIONAL_CFLAGS) -Wall -O65 pwntcha_LDFLAGS = $(ADDITIONAL_LDFLAGS)6 4 pwntcha_SOURCES = \ 7 5 main.c \ … … 17 15 vbulletin.c \ 18 16 test.c 17 pwntcha_CFLAGS = $(ADDITIONAL_CFLAGS) -Wall -O6 18 pwntcha_LDFLAGS = $(ADDITIONAL_LDFLAGS) 19 pwntcha_LDADD = $(ADDITIONAL_LDADD) 19 20 21 if USE_OLE 22 ADDITIONAL_CFLAGS = 23 ADDITIONAL_LDFLAGS = 24 ADDITIONAL_LDADD = -luuid -loleaut32 -lole32 -lgdi32 25 else 20 26 if USE_SDL 21 27 ADDITIONAL_CFLAGS = `sdl-config --cflags` 22 28 ADDITIONAL_LDFLAGS = `sdl-config --libs` -lSDL_image 29 ADDITIONAL_LDADD = 23 30 else 24 31 if USE_IMLIB2 25 32 ADDITIONAL_CFLAGS = `imlib2-config --cflags` -DX_DISPLAY_MISSING=1 26 33 ADDITIONAL_LDFLAGS = `imlib2-config --libs` 34 ADDITIONAL_LDADD = 27 35 else 28 36 if USE_OPENCV 29 37 ADDITIONAL_CFLAGS = `opencv-config --cflags` 30 38 ADDITIONAL_LDFLAGS = `opencv-config --libs opencv highgui` 39 ADDITIONAL_LDADD = 31 40 else 32 41 ADDITIONAL_CFLAGS = 33 42 ADDITIONAL_LDFLAGS = 43 ADDITIONAL_LDADD = 44 endif 34 45 endif 35 46 endif -
pwntcha/trunk/src/image.c
r427 r435 16 16 #include "common.h" 17 17 18 #if defined(HAVE_SDL_IMAGE_H) 18 #if defined(WIN32) 19 # include <windows.h> 20 # include <ocidl.h> 21 # include <olectl.h> 22 BOOL oleload(LPCTSTR name, LPPICTURE* pic); 23 struct priv 24 { 25 HBITMAP bitmap; 26 BITMAPINFO info; 27 }; 28 #elif defined(HAVE_SDL_IMAGE_H) 19 29 # include <SDL_image.h> 20 30 #elif defined(HAVE_IMLIB2_H) … … 30 40 { 31 41 struct image *img; 32 #if defined(HAVE_SDL_IMAGE_H) 42 #if defined(WIN32) 43 struct priv *priv = malloc(sizeof(struct priv)); 44 LPPICTURE pic = NULL; 45 HDC dc; 46 long scrwidth = 0, scrheight = 0; 47 int width, height, i; 48 void *data = NULL; 49 #elif defined(HAVE_SDL_IMAGE_H) 33 50 SDL_Surface *priv = IMG_Load(name); 34 51 #elif defined(HAVE_IMLIB2_H) … … 41 58 return NULL; 42 59 43 #if defined(HAVE_SDL_IMAGE_H) 60 #if defined(WIN32) 61 if(!oleload((LPCTSTR)name, &pic)) 62 { 63 free(priv); 64 return NULL; 65 } 66 67 dc = CreateCompatibleDC(NULL); 68 69 for(i = 0; ; i++) 70 { 71 DEVMODE devMode; 72 devMode.dmSize = sizeof(DEVMODE); 73 74 if(EnumDisplaySettings(NULL, i, &devMode) != 1) 75 break; 76 77 /* printf("mode %i x %i - %i\n", (int)devMode.dmPelsWidth, 78 (int)devMode.dmPelsHeight, (int)devMode.dmBitsPerPel); */ 79 } 80 81 if(GetDeviceCaps(dc, BITSPIXEL) < 24) 82 { 83 fprintf(stderr, "a screen depth of at least 24bpp is required\n"); 84 DeleteDC(dc); 85 free(priv); 86 return NULL; 87 } 88 89 pic->lpVtbl->get_Width(pic, &scrwidth); 90 pic->lpVtbl->get_Height(pic, &scrheight); 91 width = (scrwidth * GetDeviceCaps(dc, LOGPIXELSX) + 2540 / 2) / 2540; 92 height = (scrheight * GetDeviceCaps(dc, LOGPIXELSY) + 2540 / 2) / 2540; 93 94 memset(&priv->info, 0, sizeof(BITMAPINFO)); 95 priv->info.bmiHeader.biSize = sizeof(BITMAPINFOHEADER); 96 priv->info.bmiHeader.biBitCount = 24; 97 priv->info.bmiHeader.biWidth = width; 98 priv->info.bmiHeader.biHeight = -height; 99 priv->info.bmiHeader.biCompression = BI_RGB; 100 priv->info.bmiHeader.biPlanes = 1; 101 102 priv->bitmap = CreateDIBSection(dc, &priv->info, DIB_RGB_COLORS, &data, 0, 0); 103 SelectObject(dc, priv->bitmap); 104 pic->lpVtbl->Render(pic, dc, 0, 0, width, height, 105 0, scrheight, scrwidth, -scrheight, NULL); 106 pic->lpVtbl->Release(pic); 107 DeleteDC(dc); 108 #elif defined(HAVE_SDL_IMAGE_H) 44 109 if(priv->format->BytesPerPixel == 1) 45 110 { … … 51 116 #endif 52 117 53 img = malloc(sizeof(struct image)); 54 #if defined(HAVE_SDL_IMAGE_H) 118 img = (struct image *)malloc(sizeof(struct image)); 119 #if defined(WIN32) 120 img->width = width; 121 img->height = height; 122 img->pitch = 3 * width; 123 img->channels = 3; 124 img->pixels = data; 125 #elif defined(HAVE_SDL_IMAGE_H) 55 126 img->width = priv->w; 56 127 img->height = priv->h; … … 80 151 { 81 152 struct image *img; 82 #if defined(HAVE_SDL_IMAGE_H) 153 #if defined(WIN32) 154 struct priv *priv = malloc(sizeof(struct priv)); 155 HDC dc; 156 void *data = NULL; 157 #elif defined(HAVE_SDL_IMAGE_H) 83 158 SDL_Surface *priv; 84 159 Uint32 rmask, gmask, bmask, amask; … … 105 180 return NULL; 106 181 107 img = malloc(sizeof(struct image)); 108 #if defined(HAVE_SDL_IMAGE_H) 182 img = (struct image *)malloc(sizeof(struct image)); 183 #if defined(WIN32) 184 dc = CreateCompatibleDC(NULL); 185 if(GetDeviceCaps(dc, BITSPIXEL) < 24) 186 { 187 fprintf(stderr, "a screen depth of at least 24bpp is required\n"); 188 DeleteDC(dc); 189 free(priv); 190 return NULL; 191 } 192 priv->info.bmiHeader.biSize = sizeof(BITMAPINFOHEADER); 193 priv->info.bmiHeader.biWidth = width; 194 priv->info.bmiHeader.biHeight = -height; 195 priv->info.bmiHeader.biCompression = BI_RGB; 196 priv->info.bmiHeader.biBitCount = 24; 197 priv->info.bmiHeader.biPlanes = 1; 198 priv->bitmap = CreateDIBSection(dc, &priv->info, 199 DIB_RGB_COLORS, &data, 0, 0); 200 DeleteDC(dc); 201 img->width = width; 202 img->height = height; 203 img->pitch = 3 * width; 204 img->channels = 3; 205 img->pixels = data; 206 #elif defined(HAVE_SDL_IMAGE_H) 109 207 img->width = priv->w; 110 208 img->height = priv->h; … … 133 231 void image_free(struct image *img) 134 232 { 135 #if defined(HAVE_SDL_IMAGE_H) 233 #if defined(WIN32) 234 struct priv *priv = img->priv; 235 DeleteObject(priv->bitmap); 236 free(img->priv); 237 #elif defined(HAVE_SDL_IMAGE_H) 136 238 SDL_FreeSurface(img->priv); 137 239 #elif defined(HAVE_IMLIB2_H) … … 149 251 void image_save(struct image *img, const char *name) 150 252 { 151 #if defined(HAVE_SDL_IMAGE_H) 253 #if defined(WIN32) 254 255 #elif defined(HAVE_SDL_IMAGE_H) 152 256 SDL_SaveBMP(img->priv, name); 153 257 #elif defined(HAVE_IMLIB2_H) … … 201 305 } 202 306 307 #if defined(WIN32) 308 BOOL oleload(LPCTSTR name, LPPICTURE* pic) 309 { 310 HRESULT ret; 311 HANDLE h; 312 DWORD size, read = 0; 313 LPVOID data; 314 HGLOBAL buffer; 315 LPSTREAM stream = NULL; 316 317 h = CreateFile(name, GENERIC_READ, 0, NULL, OPEN_EXISTING, 0, NULL); 318 if (h == INVALID_HANDLE_VALUE) 319 return FALSE; 320 321 size = GetFileSize(h, NULL); 322 if(size == (DWORD)-1) 323 { 324 CloseHandle(h); 325 return FALSE; 326 } 327 328 buffer = GlobalAlloc(GMEM_MOVEABLE, size); 329 if(!buffer) 330 { 331 CloseHandle(h); 332 return FALSE; 333 } 334 335 data = GlobalLock(buffer); 336 if(!data) 337 { 338 GlobalUnlock(buffer); 339 CloseHandle(h); 340 return FALSE; 341 } 342 343 ret = ReadFile(h, data, size, &read, NULL); 344 GlobalUnlock(buffer); 345 CloseHandle(h); 346 347 if(!ret) 348 return FALSE; 349 350 ret = CreateStreamOnHGlobal(buffer, TRUE, &stream); 351 if(!SUCCEEDED(ret)) 352 { 353 if(stream) 354 stream->lpVtbl->Release(stream); 355 return FALSE; 356 } 357 358 if(!stream) 359 return FALSE; 360 361 if(*pic) 362 (*pic)->lpVtbl->Release(*pic); 363 364 ret = OleLoadPicture(stream, size, FALSE, &IID_IPicture, (PVOID *)pic); 365 stream->lpVtbl->Release(stream); 366 367 if(!SUCCEEDED(ret)) 368 return FALSE; 369 370 if(!*pic) 371 return FALSE; 372 373 return TRUE; 374 } 375 #endif 376
Note: See TracChangeset
for help on using the changeset viewer.