Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.02.2015, 11:15   #11
challengerr
Участник клуба
 
Аватар для challengerr
 
Регистрация: 30.07.2008
Сообщений: 1,601
По умолчанию

Чтение файловой системы (WinAPI), получение списка окон и элементов управления, запущенных в системе, проверка состояния оперативной памяти и другое

Код:
#include <stdio.h>
#include <string.h>
#include <windows.h>
#include <conio.h>
#include <Psapi.h>
#include <Sddl.h>
#include <AccCtrl.h>
#include <Aclapi.h>

#pragma comment (lib, "wsock32.lib")
#pragma comment (lib, "Kernel32.lib")
#pragma comment (lib, "Psapi.lib")
#pragma comment (lib, "user32.lib")
#pragma comment (lib, "Gdi32.lib")
#pragma comment(lib, "advapi32.lib")


BOOL CALLBACK e2(HWND hwnd, LPARAM l)
{
char str[1024];
GetWindowText(hwnd, str, 1024);
printf("child: %x %s\n", hwnd, str);

return 1; 
}



BOOL CALLBACK e(HWND hwnd, LPARAM l)
{
char str[1024];
GetWindowText(hwnd, str, 1024);
printf("main: %x %s\n", hwnd, str);
EnumChildWindows(hwnd, (WNDENUMPROC) &e2, 0);
return 1;
}


int main(int argc, char* argv[])
{
DWORD b;
DWORD p[1024];
int i;
int r;
HANDLE h;
HMODULE m[1024];
DWORD b2;
int j;
char str[1024];
PROCESS_MEMORY_COUNTERS pm;
HWND hw;
HDC hdc;
SIZE x;
WIN32_FIND_DATA wf;
HANDLE hl;
HDC hdc2;
STARTUPINFO si;
PROCESS_INFORMATION pf;
int i1,i2,i3,i4;
SECURITY_ATTRIBUTES  sa1;
SECURITY_ATTRIBUTES  sa2;
char str2[1024];
char str3[1024];
char str4[1024];
SECURITY_INFORMATION sinf;
PSID ps1;
PSID ps2;
PACL pa1;
PACL pa2;
PSECURITY_DESCRIPTOR sd;


printf("error:%x %d\n", GetLastError(), GetLastError()); 
hl = FindFirstFile("*\0", &wf); 
printf("%s\n", wf.cFileName); 
while(FindNextFile(hl, &wf) ) 
printf("%s\n", wf.cFileName); 
hw = GetConsoleWindow(); 
hdc = GetDC(hw); 
hdc2 = GetDC(NULL); 
for(i1 = 30, i3 = 600; i1< 130; i1++, i3++) 
for(i2 = 30, i4 = 600; i2< 130;  i2++, i4++) 
SetPixel(hdc2, i3, i4, GetPixel(hdc2, i1, i2)); 
SetBkColor(hdc, RGB(0, 255, 0)); 
ScaleWindowExtEx(hdc, 5, 1, 5, 1, &x); 
ReleaseDC(hw, hdc);  
ReleaseDC(0, hdc2); 
printf("%d %d\n", x.cx, x.cy); 
SetConsoleTitle("_\0");
EnumProcesses(p, sizeof(p), &b);
r = b / sizeof(DWORD);
printf("r:%d\n", r);

for(i = 0;i < r;i++)
{
printf("Open: %d ", p[i]);
h = OpenProcess( PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, 0, p[i]);
GetSecurityInfo(h, SE_UNKNOWN_OBJECT_TYPE, sinf, &ps1, &ps2, &pa1 ,&pa2, &sd);
ConvertSidToStringSid(&ps1, (LPSTR * ) &str2);
printf("%s\n", str2);
ZeroMemory(&pm, sizeof(pm));
GetProcessMemoryInfo(h, &pm, sizeof(pm) );
printf("\n");
printf("PageFaultCount:%x %d\n", pm.PageFaultCount, pm.PageFaultCount );
printf("PeakWorkingSetSize: %x %d\n", pm.PeakWorkingSetSize, pm.PeakWorkingSetSize / 1024);
printf("WorkingSetSize: %x %d\n", pm.WorkingSetSize, pm.WorkingSetSize / 1024);
printf("QuotaPeakPagedPoolUsage: %x %d\n", pm.QuotaPeakPagedPoolUsage, pm.QuotaPeakPagedPoolUsage / 1024);
printf("QuotaPagedPoolUsage: %x %d\n", pm.QuotaPagedPoolUsage, pm.QuotaPagedPoolUsage / 1024);
printf("QuotaPeakNonPagedPoolUsage: %x %d\n", pm.QuotaPeakNonPagedPoolUsage, pm.QuotaPeakNonPagedPoolUsage / 1024);
printf("QuotaNonPagedPoolUsage: %x %d\n", pm.QuotaNonPagedPoolUsage, pm.QuotaNonPagedPoolUsage / 1024);
printf("PagefileUsage: %x %d\n", pm.PagefileUsage, pm.PagefileUsage / 1024);
printf("PeakPagefileUsage: %x %d\n", pm.PeakPagefileUsage, pm.PeakPagefileUsage / 1024);
EnumProcessModules(h, m, sizeof(m),  &b2);
for(j = 0;j < ( sizeof(b2) /sizeof(HMODULE) ) ;j++)
{
GetModuleFileNameEx(h, m[j], str, 1024);
printf("%s\n", str);
}
CloseHandle(h);
printf("\n");
}
EnumWindows( (WNDENUMPROC) &e, 0);
ZeroMemory(&si, sizeof(si) );
si.cb = sizeof(si);
ZeroMemory( &pf, sizeof(pf) );
ZeroMemory(&sa1, sizeof(sa1) );
ZeroMemory(&sa2, sizeof(sa2) );
sa1.nLength = sizeof(sa1);
sa1.bInheritHandle = 0;
sa2.nLength = sizeof(sa2);
sa2.bInheritHandle = 0;
if ( ! CreateProcess(0,argv[0],&sa1,&sa2, 0, 0, 0,0, &si, &pf) )
{
printf("error:%x %d\n", GetLastError(), GetLastError());
}
else
{
CloseHandle(pf.hProcess);
CloseHandle(pf.hThread);
}


 return 0;
}
"SPACE.THE FINAL FRONTIER.This's a voyage of starship Enterprise. It's 5-year mission to explore strange new worlds,to seek out new life and civilizations,to boldly go where no man has gone before"
challengerr вне форума Ответить с цитированием
Старый 17.02.2015, 11:18   #12
challengerr
Участник клуба
 
Аватар для challengerr
 
Регистрация: 30.07.2008
Сообщений: 1,601
По умолчанию

Попытка написать DVD декодер для считывание потокового видео в формате MPEG 2 c DVD дисков (русских декодеров не видел, т.к. их нет)
Вложения
Тип файла: zip dvd_decoderl.zip (28.7 Кб, 3 просмотров)
"SPACE.THE FINAL FRONTIER.This's a voyage of starship Enterprise. It's 5-year mission to explore strange new worlds,to seek out new life and civilizations,to boldly go where no man has gone before"
challengerr вне форума Ответить с цитированием
Старый 17.02.2015, 11:24   #13
challengerr
Участник клуба
 
Аватар для challengerr
 
Регистрация: 30.07.2008
Сообщений: 1,601
По умолчанию

Клавиатурный хук (WinAPI)

Код:
// hookdll.dll хука

#include <windows.h>
#include <stdio.h>

#pragma comment(lib, "user32.lib")
#pragma comment(lib, "kernel32.lib")
#pragma comment(lib, "gdi32.lib")


#ifdef __cplusplus
extern "C" {
#endif

FILE *f;
DWORD coord;

__declspec(dllexport)  void f1() { printf("f()\n"); }
__declspec(dllexport) LRESULT CALLBACK KeyboardProc  (int code, WPARAM wParam, LPARAM lParam) { POINT pnt; GetCursorPos(&pnt); switch(wParam) {  case VK_HOME: coord = pnt.y; coord <<= 16; coord |= pnt.x; SendMessage(GetActiveWindow(), WM_LBUTTONDBLCLK, MK_LBUTTON, coord);  break;  case VK_END:  coord = pnt.y; coord <<= 16; coord |= pnt.x;  SendMessage(GetActiveWindow(), WM_RBUTTONDBLCLK, MK_RBUTTON, coord); break; case VK_LEFT: pnt.x -=5; break; case VK_RIGHT: pnt.x +=5; break; case VK_UP: pnt.y -= 5; break; case VK_DOWN: pnt.y +=5;break; } SetCursorPos(pnt.x, pnt.y);return CallNextHookEx(0, code, wParam, lParam);}

#ifdef __cplusplus
}
#endif
исполняемый файл для использования хука

#
Код:
include <windows.h>
#include <d3dx.h> 
#include <stdio.h>
#include <tchar.h>
#include <stdlib.h>

#pragma comment(lib, "user32.lib")
#pragma comment(lib, "kernel32.lib")
#pragma comment(lib, "gdi32.lib")

typedef void (__cdecl* KPROC)();

KPROC tt;WNDCLASSEX wc; MSG msg; HWND hwnd;HOOKPROC hkp;
HINSTANCE hinstdll;HHOOK hhook;HHOOK hhook2;HHOOK hhook3;HOOKPROC KeyboardProc;HOOKPROC GetMsgProc;HOOKPROC SysMsgProc;HWND ghwnd;WORD coord;

LRESULT CALLBACK WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam){ static POINT pnt;switch (uMsg){
case WM_LBUTTONDBLCLK: printf("lb\n"); break;
case WM_RBUTTONDBLCLK: printf("rb\n"); break;

case WM_CREATE:ghwnd = hwnd;break;case WM_KEYDOWN:GetCursorPos(&pnt);switch(wParam){case VK_HOME: coord = pnt.x; coord <<= 8; coord |= pnt.y; SendMessage(ghwnd, WM_LBUTTONDBLCLK, MK_LBUTTON, coord); break; case VK_END: coord = pnt.x; coord <<= 8; coord |= pnt.y;  SendMessage(ghwnd, WM_RBUTTONDBLCLK, MK_RBUTTON, coord);break;case VK_LEFT:pnt.x -=5;break;case VK_RIGHT:pnt.x +=5;break;case VK_UP:   pnt.y -= 5;break;case VK_DOWN:pnt.y +=5;break;}SetCursorPos(pnt.x, pnt.y);return 0;case  WM_DESTROY:PostQuitMessage(NULL);return 0;case WM_PAINT:return 0;default: return DefWindowProc(hwnd, uMsg,wParam, lParam);} return DefWindowProc(hwnd, uMsg,wParam, lParam);}
int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR CmdLine, int CmdShow) { wc.cbSize = sizeof(WNDCLASSEX); wc.style = CS_HREDRAW|CS_VREDRAW; wc.lpfnWndProc = (WNDPROC) WndProc; wc.cbClsExtra = NULL; wc.cbWndExtra = NULL; wc.hInstance = hInst; wc.hbrBackground = (HBRUSH) GetStockObject(WHITE_BRUSH); wc.lpszMenuName = NULL; wc.lpszClassName =  "SimpleWinClass"; wc.hIcon = LoadIcon(NULL, IDI_APPLICATION); wc.hIconSm =LoadIcon(NULL, IDI_APPLICATION); wc.hCursor = LoadCursor(NULL, IDC_ARROW); RegisterClassEx(&wc); hwnd = CreateWindowEx(NULL, "SimpleWinClass", "W2", WS_OVERLAPPEDWINDOW, 0, 0, 0, 0, NULL, NULL, hInst, NULL); ShowWindow(hwnd, SW_SHOWNORMAL); UpdateWindow(hwnd); while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return msg.wParam;}

int main(int argc, char* argv[]) { HINSTANCE hInstance = GetModuleHandle(0); LPSTR CommandLine = GetCommandLine(); 

// Получение хэндла к DLL осуществляется функцией LoadLibrary с аргументом в виде имени DLL// хэндл к DLL
hinstdll = LoadLibrary(TEXT("hookdll.dll")); if (hinstdll == 0) printf("hinstdll\n"), exit(0);

tt = (KPROC)GetProcAddress(hinstdll, "f1"); if (tt == 0) printf("tt = 0: %x\n", GetLastError());
else tt();


// GetProcAddress используется для получения адресов функций в модуле DLL// получение адресов функций в DLL
hkp = (HOOKPROC)GetProcAddress(hinstdll, "_KeyboardProc@12"); if (hkp == 0) printf("hkp = 0: %x\n", GetLastError());

// Функция SetWindowsHookEx инсталлирует процедуру захвата и специфицирует тип процедуры захвата,// определяет должна ли эта процедура захвата ассоциироваться со всеми потоками на том же десктопе// или с отдельноым потоком  и указатель на входную точку в процедуру// ГЛОБАЛЬНЫЙ ХУК помещается в DLL отдельно от приложения использующего хук.// Приложение, инсталлирующее хук, должно иметь хэндл к модулю DLL, чтобы использовать процедуру захвата// SetWindowsHookEx// первый аргумент: тип инсталлируемой процедуры захвата// WH_KEYBOARD  мониторит сообщения клавиатуре// второй аргумент: указатель на процедуру захвата // третий аргумент: хэндл dll содержащей второй аргумент// четвертый аргумент: определяет индентификатор потока, с которым ассоциирована процедура захвата. // если этот параметр ноль, то процедура захвата ассоциирована со всеми потоками на десктопе// NTVDM

hhook = SetWindowsHookEx(WH_KEYBOARD, (HOOKPROC) hkp, hinstdll, 0);  if (hhook == 0) printf("hhook = 0: %x\n", GetLastError());

HRESULT hresult = WinMain(hInstance, NULL,CommandLine, SW_SHOWDEFAULT);  
UnhookWindowsHookEx(hhook); 
return 0;}
"SPACE.THE FINAL FRONTIER.This's a voyage of starship Enterprise. It's 5-year mission to explore strange new worlds,to seek out new life and civilizations,to boldly go where no man has gone before"
challengerr вне форума Ответить с цитированием
Старый 17.02.2015, 11:32   #14
challengerr
Участник клуба
 
Аватар для challengerr
 
Регистрация: 30.07.2008
Сообщений: 1,601
По умолчанию

Простейший дизассемблер
Вложения
Тип файла: zip disasm.zip (5.1 Кб, 4 просмотров)
"SPACE.THE FINAL FRONTIER.This's a voyage of starship Enterprise. It's 5-year mission to explore strange new worlds,to seek out new life and civilizations,to boldly go where no man has gone before"
challengerr вне форума Ответить с цитированием
Старый 17.02.2015, 11:36   #15
challengerr
Участник клуба
 
Аватар для challengerr
 
Регистрация: 30.07.2008
Сообщений: 1,601
По умолчанию

Классы для использования DirectX8, Directx9, directx10, directx11, opengl
Вложения
Тип файла: zip texture.zip (54.4 Кб, 3 просмотров)
"SPACE.THE FINAL FRONTIER.This's a voyage of starship Enterprise. It's 5-year mission to explore strange new worlds,to seek out new life and civilizations,to boldly go where no man has gone before"
challengerr вне форума Ответить с цитированием
Старый 17.02.2015, 11:46   #16
challengerr
Участник клуба
 
Аватар для challengerr
 
Регистрация: 30.07.2008
Сообщений: 1,601
По умолчанию

Закачка интернета (простейший гугл)

Код:
#include <stdio.h>
#include <string.h>
#include <windows.h>

#pragma comment (lib, "wsock32.lib")


int main()
{ 
unsigned int i, j, k, l; 
char buf[1024]; 
char str[128]; 
char str2[128]; 
WSADATA data; 
SOCKET sock; 
SOCKADDR_IN sockaddr; 
PHOSTENT phe; 
FILE* f;  

for(i = 0; i < 255; i++)
for(j = 0; j < 255; j++)
for(k = 0; k < 255; k++)
for(l = 0; l < 255; l++)
{

sprintf(str, "%d %d %d %d\0", i, j, k , l);
printf("%d %d %d %d\n", i, j, k , l);

f = fopen(str, "w"); 

WSAStartup(0x101, &data);  
sock = socket(AF_INET, SOCK_STREAM, 0); 
sockaddr.sin_family = AF_INET; 
sockaddr.sin_port = htons(80); 
sockaddr.sin_addr.S_un.S_un_b.s_b1 = i; 
sockaddr.sin_addr.S_un.S_un_b.s_b2 = j; 
sockaddr.sin_addr.S_un.S_un_b.s_b3 = k;  
sockaddr.sin_addr.S_un.S_un_b.s_b4 = l;

fprintf(f, "%d %d %d %d\n",  sockaddr.sin_addr.S_un.S_un_b.s_b1, sockaddr.sin_addr.S_un.S_un_b.s_b2, sockaddr.sin_addr.S_un.S_un_b.s_b3, 

sockaddr.sin_addr.S_un.S_un_b.s_b4 );

connect(sock, (PSOCKADDR) &sockaddr,sizeof(sockaddr)); 

sprintf(str2, "GET /\n\n");
send(sock, str2, strlen(str2), NULL);

while (recv(sock, buf, 1024, NULL) )
{
 fprintf(f, "%s",buf);
}
WSACleanup(); 

fclose(f);

}


return 0;
}
"SPACE.THE FINAL FRONTIER.This's a voyage of starship Enterprise. It's 5-year mission to explore strange new worlds,to seek out new life and civilizations,to boldly go where no man has gone before"
challengerr вне форума Ответить с цитированием
Старый 17.02.2015, 11:59   #17
challengerr
Участник клуба
 
Аватар для challengerr
 
Регистрация: 30.07.2008
Сообщений: 1,601
По умолчанию

Программа для построения графиков функций на C++
Вложения
Тип файла: zip graphl.zip (70.0 Кб, 6 просмотров)
"SPACE.THE FINAL FRONTIER.This's a voyage of starship Enterprise. It's 5-year mission to explore strange new worlds,to seek out new life and civilizations,to boldly go where no man has gone before"
challengerr вне форума Ответить с цитированием
Старый 17.02.2015, 15:40   #18
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

Цитата:
Программа для построения графиков функций на C++
Есть версия, что функция не должна быть очень большой. Обычно говорят о нормальной длине в 5-15 строк. Также нередко говорят про количество переменных в функции. Единогласно все программисты нелюбят статические переменные - хотя бы потому, что это затрудняет повторное использование почти всегда.

Но я вот скопишащу кусок, который мне понравился:
Код:
static int fls = 0;
static int f1x = 0;
static int f1y = 0;
static int f2x = 0;
static int f2y = 0;
HDC hdc;
float i;
int center_x;
int center_y;
int mastab_x;
int mastab_y;
float fx;
float fx2;
float fx3;
HPEN hpen1;
HPEN hpen2;
int j;
static float fcx;
static float fcy;
static float fl;
static float fdx;
static float fdy;

static float fex;
static float fey;

static float ffx;
static float ffy;

static float fgx;
static float fgy;

static float fhx;
static float fhy;

static float fix;
static float fiy;

static float fjx;
static float fjy;

static float fkx;
static float fky;

static float flx;
static float fly;

static float fmx;
static float fmy;

static float fnx;
static float fny;

static float fox;
static float foy;

static float fpx;
static float fpy;

static float frx;
static float fry;

static float fsx;
static float fsy;


static float ncx;
static float ncy;
Ну еще кусок забавный, мне как бэ не понятно почему ты так настойчиво избегал тут enum, да и вообще, странный это код. Как сказал бы Фаулер "упущенная возможность для абстракции".
Код:
case 0x30: printf("0"); mt->clicked(0); break; 
case 0x31: printf("1"); mt->clicked(1); break; 
case 0x32: printf("2"); mt->clicked(2); break; 
case 0x33: printf("3"); mt->clicked(3); break; 
case 0x34: printf("4"); mt->clicked(4); break; 
case 0x35: printf("5"); mt->clicked(5); break; 
case 0x36: printf("6"); mt->clicked(6); break; 
case 0x37: printf("7"); mt->clicked(7); break; 
case 0x38: printf("8"); mt->clicked(8); break; 
case 0x39: printf("9"); mt->clicked(9); break; 
case 0x41: printf("a"); break; 
case 0x42: printf("b"); break; 
case 0x43: printf("c"); break; 
case 0x44: printf("d"); break; 
case 0x45: printf("e"); break; 
case 0x46: printf("f"); break; 
case 0x47: printf("g"); break; 
case 0x48: printf("h"); break; 
case 0x49: printf("i"); break; 
case 0x4a: printf("j"); break; 
case 0x4b: printf("k"); break; 
case 0x4c: printf("l"); break; 
case 0x4d: printf("m"); break; 
case 0x4e: printf("n"); break; 
case 0x4f: printf("o"); break; 
case 0x50: printf("p"); break; 
case 0x51: printf("q");  break; 
case 0x52: printf("r");  break; 
case 0x53: printf("s");  break; 
case 0x54: printf("t"); break; 
case 0x55: printf("u"); break; 
case 0x56: printf("v"); break; 
case 0x57: printf("w"); break; 
case 0x58: printf("x"); break; 
case 0x59: printf("y"); break; 
case 0x5a: printf("z"); break;
rrrFer вне форума Ответить с цитированием
Старый 17.02.2015, 17:06   #19
challengerr
Участник клуба
 
Аватар для challengerr
 
Регистрация: 30.07.2008
Сообщений: 1,601
По умолчанию

Цитата:
Есть версия, что функция не должна быть очень большой.
Пример "не очень большой" функции из libjpeg c кучей case

Код:
/*
 * Initialize for a processing pass.
 * Verify that all referenced Q-tables are present, and set up
 * the divisor table for each one.
 * In the current implementation, DCT of all components is done during
 * the first pass, even if only some components will be output in the
 * first scan.  Hence all components should be examined here.
 */

METHODDEF(void)
start_pass_fdctmgr (j_compress_ptr cinfo)
{
  my_fdct_ptr fdct = (my_fdct_ptr) cinfo->fdct;
  int ci, qtblno, i;
  jpeg_component_info *compptr;
  int method = 0;
  JQUANT_TBL * qtbl;
  DCTELEM * dtbl;

  for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components;
       ci++, compptr++) {
    /* Select the proper DCT routine for this component's scaling */
    switch ((compptr->DCT_h_scaled_size << 8) + compptr->DCT_v_scaled_size) {
#ifdef DCT_SCALING_SUPPORTED
    case ((1 << 8) + 1):
      fdct->do_dct[ci] = jpeg_fdct_1x1;
      method = JDCT_ISLOW;	/* jfdctint uses islow-style table */
      break;
    case ((2 << 8) + 2):
      fdct->do_dct[ci] = jpeg_fdct_2x2;
      method = JDCT_ISLOW;	/* jfdctint uses islow-style table */
      break;
    case ((3 << 8) + 3):
      fdct->do_dct[ci] = jpeg_fdct_3x3;
      method = JDCT_ISLOW;	/* jfdctint uses islow-style table */
      break;
    case ((4 << 8) + 4):
      fdct->do_dct[ci] = jpeg_fdct_4x4;
      method = JDCT_ISLOW;	/* jfdctint uses islow-style table */
      break;
    case ((5 << 8) + 5):
      fdct->do_dct[ci] = jpeg_fdct_5x5;
      method = JDCT_ISLOW;	/* jfdctint uses islow-style table */
      break;
    case ((6 << 8) + 6):
      fdct->do_dct[ci] = jpeg_fdct_6x6;
      method = JDCT_ISLOW;	/* jfdctint uses islow-style table */
      break;
    case ((7 << 8) + 7):
      fdct->do_dct[ci] = jpeg_fdct_7x7;
      method = JDCT_ISLOW;	/* jfdctint uses islow-style table */
      break;
    case ((9 << 8) + 9):
      fdct->do_dct[ci] = jpeg_fdct_9x9;
      method = JDCT_ISLOW;	/* jfdctint uses islow-style table */
      break;
    case ((10 << 8) + 10):
      fdct->do_dct[ci] = jpeg_fdct_10x10;
      method = JDCT_ISLOW;	/* jfdctint uses islow-style table */
      break;
    case ((11 << 8) + 11):
      fdct->do_dct[ci] = jpeg_fdct_11x11;
      method = JDCT_ISLOW;	/* jfdctint uses islow-style table */
      break;
    case ((12 << 8) + 12):
      fdct->do_dct[ci] = jpeg_fdct_12x12;
      method = JDCT_ISLOW;	/* jfdctint uses islow-style table */
      break;
    case ((13 << 8) + 13):
      fdct->do_dct[ci] = jpeg_fdct_13x13;
      method = JDCT_ISLOW;	/* jfdctint uses islow-style table */
      break;
    case ((14 << 8) + 14):
      fdct->do_dct[ci] = jpeg_fdct_14x14;
      method = JDCT_ISLOW;	/* jfdctint uses islow-style table */
      break;
    case ((15 << 8) + 15):
      fdct->do_dct[ci] = jpeg_fdct_15x15;
      method = JDCT_ISLOW;	/* jfdctint uses islow-style table */
      break;
    case ((16 << 8) + 16):
      fdct->do_dct[ci] = jpeg_fdct_16x16;
      method = JDCT_ISLOW;	/* jfdctint uses islow-style table */
      break;
    case ((16 << 8) + 8):
      fdct->do_dct[ci] = jpeg_fdct_16x8;
      method = JDCT_ISLOW;	/* jfdctint uses islow-style table */
      break;
  
...
"SPACE.THE FINAL FRONTIER.This's a voyage of starship Enterprise. It's 5-year mission to explore strange new worlds,to seek out new life and civilizations,to boldly go where no man has gone before"
challengerr вне форума Ответить с цитированием
Старый 17.02.2015, 17:07   #20
challengerr
Участник клуба
 
Аватар для challengerr
 
Регистрация: 30.07.2008
Сообщений: 1,601
По умолчанию

продолжение вырезка из libjpeg

Код:
  case ((14 << 8) + 7):
      fdct->do_dct[ci] = jpeg_fdct_14x7;
      method = JDCT_ISLOW;	/* jfdctint uses islow-style table */
      break;
    case ((12 << 8) + 6):
      fdct->do_dct[ci] = jpeg_fdct_12x6;
      method = JDCT_ISLOW;	/* jfdctint uses islow-style table */
      break;
    case ((10 << 8) + 5):
      fdct->do_dct[ci] = jpeg_fdct_10x5;
      method = JDCT_ISLOW;	/* jfdctint uses islow-style table */
      break;
    case ((8 << 8) + 4):
      fdct->do_dct[ci] = jpeg_fdct_8x4;
      method = JDCT_ISLOW;	/* jfdctint uses islow-style table */
      break;
    case ((6 << 8) + 3):
      fdct->do_dct[ci] = jpeg_fdct_6x3;
      method = JDCT_ISLOW;	/* jfdctint uses islow-style table */
      break;
    case ((4 << 8) + 2):
      fdct->do_dct[ci] = jpeg_fdct_4x2;
      method = JDCT_ISLOW;	/* jfdctint uses islow-style table */
      break;
    case ((2 << 8) + 1):
      fdct->do_dct[ci] = jpeg_fdct_2x1;
      method = JDCT_ISLOW;	/* jfdctint uses islow-style table */
      break;
    case ((8 << 8) + 16):
      fdct->do_dct[ci] = jpeg_fdct_8x16;
      method = JDCT_ISLOW;	/* jfdctint uses islow-style table */
      break;
    case ((7 << 8) + 14):
      fdct->do_dct[ci] = jpeg_fdct_7x14;
      method = JDCT_ISLOW;	/* jfdctint uses islow-style table */
      break;
    case ((6 << 8) + 12):
      fdct->do_dct[ci] = jpeg_fdct_6x12;
      method = JDCT_ISLOW;	/* jfdctint uses islow-style table */
      break;
    case ((5 << 8) + 10):
      fdct->do_dct[ci] = jpeg_fdct_5x10;
      method = JDCT_ISLOW;	/* jfdctint uses islow-style table */
      break;
    case ((4 << 8) + 8):
      fdct->do_dct[ci] = jpeg_fdct_4x8;
      method = JDCT_ISLOW;	/* jfdctint uses islow-style table */
      break;
    case ((3 << 8) + 6):
      fdct->do_dct[ci] = jpeg_fdct_3x6;
      method = JDCT_ISLOW;	/* jfdctint uses islow-style table */
      break;
    case ((2 << 8) + 4):
      fdct->do_dct[ci] = jpeg_fdct_2x4;
      method = JDCT_ISLOW;	/* jfdctint uses islow-style table */
      break;
    case ((1 << 8) + 2):
      fdct->do_dct[ci] = jpeg_fdct_1x2;
      method = JDCT_ISLOW;	/* jfdctint uses islow-style table */
      break;
#endif
    case ((DCTSIZE << 8) + DCTSIZE):
      switch (cinfo->dct_method) {
#ifdef DCT_ISLOW_SUPPORTED
      case JDCT_ISLOW:
	fdct->do_dct[ci] = jpeg_fdct_islow;
	method = JDCT_ISLOW;
	break;
#endif
#ifdef DCT_IFAST_SUPPORTED
      case JDCT_IFAST:
	fdct->do_dct[ci] = jpeg_fdct_ifast;
	method = JDCT_IFAST;
	break;
#endif
#ifdef DCT_FLOAT_SUPPORTED
      case JDCT_FLOAT:
	fdct->do_float_dct[ci] = jpeg_fdct_float;
	method = JDCT_FLOAT;
	break;
#endif
      default:
	ERREXIT(cinfo, JERR_NOT_COMPILED);
	break;
      }
      break;
    default:
      ERREXIT2(cinfo, JERR_BAD_DCTSIZE,
	       compptr->DCT_h_scaled_size, compptr->DCT_v_scaled_size);
      break;
    }
    qtblno = compptr->quant_tbl_no;
    /* Make sure specified quantization table is present */
    if (qtblno < 0 || qtblno >= NUM_QUANT_TBLS ||
	cinfo->quant_tbl_ptrs[qtblno] == NULL)
      ERREXIT1(cinfo, JERR_NO_QUANT_TABLE, qtblno);
    qtbl = cinfo->quant_tbl_ptrs[qtblno];
    /* Compute divisors for this quant table */
    /* We may do this more than once for same table, but it's not a big deal */
    switch (method) {
#ifdef PROVIDE_ISLOW_TABLES
    case JDCT_ISLOW:
      /* For LL&M IDCT method, divisors are equal to raw quantization
       * coefficients multiplied by 8 (to counteract scaling).
       */
      if (fdct->divisors[qtblno] == NULL) {
	fdct->divisors[qtblno] = (DCTELEM *)
	  (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
				      DCTSIZE2 * SIZEOF(DCTELEM));
      }
      dtbl = fdct->divisors[qtblno];
      for (i = 0; i < DCTSIZE2; i++) {
	dtbl[i] = ((DCTELEM) qtbl->quantval[i]) << 3;
      }
      fdct->pub.forward_DCT[ci] = forward_DCT;
      break;
#endif
#ifdef DCT_IFAST_SUPPORTED
    case JDCT_IFAST:
      {
	/* For AA&N IDCT method, divisors are equal to quantization
	 * coefficients scaled by scalefactor[row]*scalefactor[col], where
	 *   scalefactor[0] = 1
	 *   scalefactor[k] = cos(k*PI/16) * sqrt(2)    for k=1..7
	 * We apply a further scale factor of 8.
	 */

...
"SPACE.THE FINAL FRONTIER.This's a voyage of starship Enterprise. It's 5-year mission to explore strange new worlds,to seek out new life and civilizations,to boldly go where no man has gone before"
challengerr вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Инструкция по созданию заготовки для 2D игр (для начинающих) 8Observer8 Gamedev - cоздание игр: Unity, OpenGL, DirectX 31 20.03.2023 02:01
C++ для начинающих a_Alise Помощь студентам 2 27.03.2016 10:00
Основы C++ для начинающих от 8Observer8 8Observer8 Общие вопросы C/C++ 67 08.07.2015 10:17
С++ для начинающих Maxim1 Общие вопросы C/C++ 10 31.05.2010 00:22