PMG https://forum.pmg.org.ru/ |
|
Как написать загрузчик BMP файлов https://forum.pmg.org.ru/viewtopic.php?f=8&t=490 |
Страница 2 из 3 |
Автор: | Tiger [ 09 июн 2006 07:53 ] |
Заголовок сообщения: | |
Спасибо за сылки Margenal |
Автор: | MagicWolf [ 09 июн 2006 08:18 ] |
Заголовок сообщения: | |
Voland писал(а): MagicWolf ты написал: Но если есть готовые либы, то зачем писать свои!
Я ответил тебе на это: Если бы я ещё знал как использовать эти самые либы? На мой ответ ты написал: Какие? Если тебе не понятно что-то в моё ответе, будь любезен напиши что имено тебе неясно Ты не сказал какие либы конкретно тебя интересуют! Либ на свете много! И как правило к либа идет дока, там все и описано. |
Автор: | MagicWolf [ 09 июн 2006 17:28 ] |
Заголовок сообщения: | |
Вот нашел не давно книгу: Название: Формати и алгоритмы сжатия изображения в действии Автор: Дж. МИАНО Издательство: москва ТРИУМФ Год: 2003 Страниц: 236 Формат: DJVU Размер: 3.4 Mb ISBN: 5-89392-078 Качество: хорошее Язык: русский От авторов В книге рассмотрены все самые популярные алгоритмы сжатия и формы хранения растровых изображений. Исходные тексты программ сопровождаються описанием особенностей цветовых моделей, популярным объяснением математических основ сжатия и демонстрацией эфективных способов программной реализации алгоритмов. Содержание Введение Windows BMP XBM Введение в JPEG Формат файлов JPEG Кодирование Хаффмана в JPEG Дискретное косинусное преобразование Декодирование изображения JPEG, сжатіх в последовательном режиме Создание последовательніх файлов JPEG Оптимизация DCT Прогрессивные изображения JPEG GIF PNG Развертывание сжатых данных PNG- изображения Создание PNG - файлов Сама книга: http://rapidshare.de/files/22081039/compress.djvu http://www.megaupload.com/?d=CMZSSILH http://slil.ru/22808602 http://rapidshare.de/files/22093725/0297.tif http://www.megaupload.com/?d=8Q9VJXQL Исходники: http://rapidshare.de/files/22093688/3.part1.rar http://rapidshare.de/files/22095914/3.part2.rar http://rapidshare.de/files/22099948/3.part3.rar http://rapidshare.de/files/22102362/3.part4.rar http://rapidshare.de/files/22102644/3.part5.rar http://www.megaupload.com/?d=NX5QLZC3 http://www.megaupload.com/?d=6UYVVAEA http://www.megaupload.com/?d=D3I055O2 http://www.megaupload.com/?d=BGN84531 |
Автор: | VasRoG [ 09 июн 2006 23:32 ] |
Заголовок сообщения: | |
Compilers that can compile DevIL or use it include Djgpp, MSVC++, Linux gcc, Delphi, Visual Basic, Power Basic and Dev-C++. Елы-паль,а он что C++ Builder не поддерживает? Кто-нить пробовал под 2006 его запускать? |
Автор: | VasRoG [ 09 июн 2006 23:33 ] |
Заголовок сообщения: | |
Compilers that can compile DevIL or use it include Djgpp, MSVC++, Linux gcc, Delphi, Visual Basic, Power Basic and Dev-C++. Елы-паль,а он что C++ Builder не поддерживает? Кто-нить пробовал под 2006 его запускать? |
Автор: | Tiger [ 10 июн 2006 14:33 ] |
Заголовок сообщения: | |
MagicWolf Спасибо за книгу! |
Автор: | Tiger [ 10 июн 2006 16:22 ] |
Заголовок сообщения: | |
Уважаемый MagicWolf у тебя случайно ненайдётся книжки по 3ds max 7. Желательно что-нибудь по проше. |
Автор: | Tiger [ 19 фев 2007 10:43 ] |
Заголовок сообщения: | |
Цитата: pSurf: IDirectDrawSurface7; //загружаться картинка будет на неё
hImage: HBITMAP; { хэндл картинки, его можно получить так: hImage:=LoadImage(0,file_name,IMAGE_BITMAP,0,0,LR_LOADFROMFILE or LR_CREATEDIBSECTION);} ..... var destDC, srcDC: HDC; bm: TBITMAP; //из Windows.pas, который в uses пишется hObj: HGDIOBJ; .... srcDC:=CreateCompatibleDC(0); if srcDC=0 then Exit; hObj:=SelectObject(srcDC,hImage); if (hObj=0) or (hObj=GDI_ERROR) then Exit; if GetObject(hImage,SizeOf(bm),@bm)=0 then Exit; if not CreateSurface(lpSurf,bm.bmWidth,bm.bmHeight) then Exit; if SUCCEEDED( lpSurf.GetDC( destDC ) ) then begin BitBlt(destDC,0,0,bm.bmWidth,bm.bmHeight,srcDC,0,0,SRCCOPY); lpSurf.ReleaseDC(destDC); end else Exit; DeleteObject(hObj); DeleteDC(srcDC); Это же GDI. Ненавижу GDI . |
Автор: | Tiger [ 19 фев 2007 10:46 ] |
Заголовок сообщения: | |
Цитата: Вот нашел не давно книгу:
Название: Формати и алгоритмы сжатия изображения в действии Автор: Дж. МИАНО Издательство: москва ТРИУМФ Год: 2003 Страниц: 236 Формат: DJVU Размер: 3.4 Mb ISBN: 5-89392-078 Качество: хорошее Язык: русский Кто-нибудь перезалейте исходники к книге. |
Автор: | MagicWolf [ 19 фев 2007 11:19 ] |
Заголовок сообщения: | |
Lion писал(а): Уважаемый MagicWolf у тебя случайно ненайдётся книжки по 3ds max 7.
Желательно что-нибудь по проше. Вот все что есть: Код: Paint\3DMax
07.09.2004 14:46 663 069 Inside3DSMAX.rus.chm 07.09.2004 15:08 20 274 866 Иллюстрированный самоучитель по 3DS MAX 5.html.rar 07.09.2004 15:12 670 673 Внутренний мир 3D Studio MAX.html.zip 07.09.2004 15:17 1 839 766 Анимация персонажей в 3D Studio MAX.html.zip 25.11.2004 10:53 15 744 762 New Riders - 3Ds Max 6 Fundamentals.chm 14.06.2005 15:19 69 262 061 Wordware.Publishing.Modeling.A.Character.in.3DS.Max.2nd.Edition.Feb.2005.ISBN155622088.pdf 04.02.2006 15:12 83 095 594 Питер, Бондаренко, 3ds Max 8, Библиотека пользователя, 2006.pdf 26.04.2006 07:31 5 473 355 Кен Бриллиант. Цифровая модель человека.pdf 13.07.2006 09:18 18 228 301 Комбук, Бондаренко, Плагины для 3DS MAX 6, 2004.djvu 9 файлов 215 252 447 байт |
Автор: | MagicWolf [ 19 фев 2007 11:20 ] |
Заголовок сообщения: | |
Lion писал(а): Это же GDI. Ненавижу GDI .
Где там GDI? И потом GDI+ в принципе не плохая вещь. |
Автор: | Tiger [ 19 фев 2007 13:09 ] |
Заголовок сообщения: | |
Цитата: Где там GDI? И потом GDI+ в принципе не плохая вещь.
Может вешь и не плохая, но в Линуксе она работать не будет. |
Автор: | Tiger [ 19 фев 2007 13:42 ] |
Заголовок сообщения: | |
Вот простенький загрузчик BMP файла который я написал основываясь на уроках Андре Ламота: Код: #define WIN32_LEAN_AND_MEAN
#pragma comment(lib,"dxguid.lib") #pragma comment(lib,"ddraw.lib") #include <windows.h> #include <windowsx.h> #include <stdio.h> #include <ddraw.h> #define WIDTH 640 #define HEIGHT 480 #define BPP 32 ////////////////////////////////////////////////////////////////////////// #define KEY_DOWN(vk_code) ((GetAsyncKeyState(vk_code) & 0x8000) ? 1 : 0) #define KEY_UP(vk_code) ((GetAsyncKeyState(vk_code) & 0x8000) ? 0 : 1) #define DDRAW_INIT_STRUCT(ddstruct) { memset(&ddstruct,0,sizeof(ddstruct)); ddstruct.dwSize=sizeof(ddstruct); } #define _RGB32BIT(a,r,g,b) ((b) + ((g) << 8) + ((r) << 16) + ((a) << 24)) ////////////////////////////////////////////////////////////////////////// typedef struct BITMAP_FILE_TAG { BITMAPFILEHEADER bitmapfileheader; BITMAPINFOHEADER bitmapinfoheader; PALETTEENTRY palette[256]; UCHAR *buffer; } BITMAP_FILE, *BITMAP_FILE_PTR; ////////////////////////////////////////////////////////////////////////// int Load_Image(BITMAP_FILE_PTR bitmap,char *name); int Init_Game(); int Game_Render(); int Shutdown_Game(); ////////////////////////////////////////////////////////////////////////// LPDIRECTDRAW7 d3d7=NULL; LPDIRECTDRAWSURFACE7 pBuffer=NULL; LPDIRECTDRAWSURFACE7 sBuffer=NULL; DDSURFACEDESC2 ddsd; BITMAP_FILE bitmap; HWND hwnd; MSG msg; ////////////////////////////////////////////////////////////////////////// int Load_Image(BITMAP_FILE_PTR bitmap,char *name) { FILE *fImage; fImage=fopen(name,"rb"); fread(&bitmap->bitmapfileheader,sizeof(BITMAPFILEHEADER),1,fImage); fread(&bitmap->bitmapinfoheader,sizeof(BITMAPINFOHEADER),1,fImage); bitmap->buffer=(UCHAR *)malloc(bitmap->bitmapinfoheader.biSizeImage); fread(bitmap->buffer,bitmap->bitmapinfoheader.biSizeImage,1,fImage); fclose(fImage); return 0; } //////////////////////////////////////////////////////////// int Draw_Image(int width,int height) { pBuffer->Lock(NULL,&ddsd, DDLOCK_SURFACEMEMORYPTR | DDLOCK_WAIT,NULL); DWORD *primary_buffer = (DWORD *)ddsd.lpSurface; for (int index_y = 0; index_y < height; index_y++) { for (int index_x = 0; index_x < width; index_x++) { UCHAR blue = (bitmap.buffer[index_y*width*3 + index_x*3 + 0]), green = (bitmap.buffer[index_y*width*3 + index_x*3 + 1]), red = (bitmap.buffer[index_y*width*3 + index_x*3 + 2]); DWORD pixel = _RGB32BIT(0,red,green,blue); primary_buffer[index_x + (index_y*ddsd.lPitch >> 2)] = pixel; } } pBuffer->Unlock(NULL); return 0; } //////////////////////////////////////////////////////////// LRESULT CALLBACK WinProc(HWND hwnd,UINT msg,WPARAM wparam,LPARAM lparam) { switch(msg) { case WM_CREATE: { return 0; }break; case WM_DESTROY: { PostQuitMessage(0); return 0; }break; default:break; } return DefWindowProc(hwnd, msg, wparam, lparam); } //////////////////////////////////////////////////////////// int WINAPI WinMain( HINSTANCE hinstance, HINSTANCE hprevinstance, LPSTR lpcmdline, int ncmdshow) { WNDCLASSEX win; win.cbSize = sizeof(WNDCLASSEX); win.style = CS_HREDRAW | CS_VREDRAW; win.lpfnWndProc = WinProc; win.cbClsExtra = 0; win.cbWndExtra = 0; win.hInstance = hinstance; win.hIcon = LoadIcon(NULL, IDI_APPLICATION); win.hCursor = LoadCursor(NULL, IDC_ARROW); win.hbrBackground = NULL; win.lpszMenuName = NULL; win.lpszClassName ="WINX"; win.hIconSm = LoadIcon(NULL, IDI_APPLICATION); RegisterClassEx(&win); hwnd=CreateWindowEx(NULL,"WINX","Warcraft 3000",WS_POPUP | WS_VISIBLE,0,0, WIDTH,HEIGHT,NULL,NULL,hinstance,NULL); Init_Game(); ShowWindow(hwnd,SW_SHOWDEFAULT); UpdateWindow(hwnd); ZeroMemory(&msg,sizeof(msg)); while(msg.message!=WM_QUIT) { if(PeekMessage(&msg,NULL,0,0,PM_REMOVE)) { TranslateMessage(&msg); DispatchMessage(&msg); } Game_Render(); } Shutdown_Game(); UnregisterClass("WINX",win.hInstance); return 0; } //////////////////////////////////////////////////////////// int Init_Game() { DirectDrawCreateEx(NULL,(void **)&d3d7,IID_IDirectDraw7,NULL); d3d7->SetCooperativeLevel(hwnd,DDSCL_FULLSCREEN | DDSCL_EXCLUSIVE); d3d7->SetDisplayMode(WIDTH,HEIGHT,BPP,0,0); DDRAW_INIT_STRUCT(ddsd); ZeroMemory(&ddsd,sizeof(ddsd)); ddsd.dwSize=sizeof(ddsd); ddsd.dwFlags=DDSD_CAPS; ddsd.ddsCaps.dwCaps=DDSCAPS_PRIMARYSURFACE; d3d7->CreateSurface(&ddsd,&pBuffer,NULL); Load_Image(&bitmap,"bitmap24.bmp"); return 0; } //////////////////////////////////////////////////////////// int Game_Render() { Draw_Image(WIDTH,HEIGHT); if(KEY_DOWN(VK_ESCAPE)) { PostMessage(hwnd,WM_DESTROY,0,0); } return 0; } //////////////////////////////////////////////////////////// int Shutdown_Game() { if(sBuffer!=NULL) { sBuffer->Release(); } if(pBuffer!=NULL) { pBuffer->Release(); } if(d3d7!=NULL) { d3d7->Release(); } return 0; } //////////////////////////////////////////////////////////// Это загрузчик основан на структурах BMP файла которые определены в заголовочном файле windows.h, следовательно этот загрузчик может работать только в Виндузе. Вопрос на засыпку: как написать собственные структуры BMP файла для того чтобы загрузчик мог работать не только в Виндовсе, но и в Линуксе тоже. Буду рад любой помощи. |
Автор: | Александр Иваныч [ 20 фев 2007 11:16 ] |
Заголовок сообщения: | |
Lion, эти структуры можно извлечь из заголовочных файлов Windows. Для этого в редакторе MSVS над именем структуры жмёшь правую кнопку мыши и выбираешь "Go To Definition" или "Go To Declaration", после чего откроется header в том месте, где определена структура. Вот, что я выбрал: Код: typedef unsigned short WORD;
typedef unsigned long DWORD; typedef long LONG; typedef unsigned char BYTE; typedef unsigned char UCHAR; typedef struct { WORD bfType; DWORD bfSize; WORD bfReserved1; WORD bfReserved2; DWORD bfOffBits; } BITMAPFILEHEADER; typedef struct { DWORD biSize; LONG biWidth; LONG biHeight; WORD biPlanes; WORD biBitCount; DWORD biCompression; DWORD biSizeImage; LONG biXPelsPerMeter; LONG biYPelsPerMeter; DWORD biClrUsed; DWORD biClrImportant; } BITMAPINFOHEADER; typedef struct { BYTE peRed; BYTE peGreen; BYTE peBlue; BYTE peFlags; } PALETTEENTRY; Я не проверял, будет ли это работать. Можно ещё использовать библиотеку SDL, а именно функцию SDL_LoadBMP. Кроме этого, на сайте steps3d.narod.ru поищи кроссплатформенную библиотеку libTexture, позволяющую загружать текстуры из bmp, tga и других форматов файлов. |
Автор: | Tiger [ 20 фев 2007 11:52 ] |
Заголовок сообщения: | |
Спасибо за помощь Александр Иваныч. Я думал что ты тоже как и я учишься на программиста. Теперь я вижу что ты профессионал, наверное работаешь программистом в игровой индустрии. |
Страница 2 из 3 | Часовой пояс: UTC + 3 часа [ Летнее время ] |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |