int main(int argc, char **argv) { ILuint image = 0; ILuint reference = 0; // syntax: ILtestAlgoQuant <reference> if (argc < 2) { return -1; } ilInit(); iluInit(); ilEnable(IL_ORIGIN_SET); // flip image on load if necessary ilEnable(IL_FILE_MODE); // overwrite files // load reference image ilGenImages(1, &reference); CHECK(reference != 0); CHECK(testLoadImage(argv[1], reference)); // duplicate image = ilCloneCurImage(); CHECK(image != 0); // quantize ilBindImage(image); ilSetInteger(IL_QUANTIZATION_MODE, IL_WU_QUANT); ilConvertImage(IL_COLOUR_INDEX, IL_UNSIGNED_BYTE); CHECK(testSaveImage("test_quant.png", image)); // compare two images CHECK_GREATER(iluSimilarity(reference), 0.98f); // cleanup ilDeleteImages(1, &image); ilDeleteImages(1, &reference); ilShutDown(); return 0; }
void CreateGDI() { ILuint CopyName, CurName, CurImg, CurMip; hDC = GetDC(HWnd); hMemDC = CreateCompatibleDC(hDC); CurName = ilGetInteger(IL_CUR_IMAGE); CurImg = ilGetInteger(IL_ACTIVE_IMAGE); CurMip = ilGetInteger(IL_ACTIVE_MIPMAP); CopyName = ilCloneCurImage(); ilBindImage(CopyName); //ilConvertImage(IL_BGR, IL_UNSIGNED_BYTE); hBitmap = ilutConvertToHBitmap(hDC); ilutGetBmpInfo((BITMAPINFO*)&BmpInfo); DeleteObject(SelectObject(hMemDC, hBitmap)); ilBindImage(CurName); if (CurImg) ilActiveImage(CurImg);//ilBindImage(Undos[0]); if (CurMip) ilActiveMipmap(CurMip); ilDeleteImages(1, &CopyName); return; }
// Window procedure, handles all messages for this program LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { static HMENU hMenu; static ILuint Colours; static RECT Rect; static PAINTSTRUCT ps; static HDROP hDrop; static TCHAR OpenFilter[2048]; static TCHAR SaveFilter[2048]; static TCHAR *OFilter[] = { L"All Files (*.*)", L"*.*", L"Alias|Wavefront Files (*.pix)", L"*.pix", L"Cut Files (*.cut)", L"*.cut", L"Dcx Files (*.dcx)", L"*.dcx", L"Graphics Interchange Format (*.gif)", L"*.gif", L"Half-Life Model Files (*.mdl)", L"*.mdl", L"Homeworld Image Files (*.lif)", L"*.lif", L"Image Files (All Supported Types)", L"*.jpe;*.jpg;*.jpeg;*.lif;*.bmp;*.ico;*.pbm;*.pgm;*.pnm;*.ppm;*.png;*.bw;*.rgb;*.rgba;*.sgi;*.tga;*.tif;*.tiff;*.pcx;*.xpm;*.psp;*.psd;*.pix;*.pxr;*.cut;*.dcx", L"Jpeg Files (*.jpe, *.jpg, *.jpeg)", L"*.jpe;*.jpg;*.jpeg", L"Kodak Photo CD Files (*.pcd)", L"*.pcd", L"Microsoft Bitmap Files (*.bmp)", L"*.bmp", L"Microsoft DirectDraw Surface (*.dds)", L"*.dds", L"Microsoft Icon Files (*.ico, *.cur)", L"*.ico, *.cur", L"Multiple Network Graphics Files (*.mng)", L"*.mng", L"Paint Shop Pro Files (*.psp)", L"*.psp", L"PhotoShop Files (*.psd)", L"*.psd", L"Pic Files (*.pic)", L"*.pic", L"Pixar Files (*.pix)", L"*.pix", L"Portable AnyMap Files (*.pbm, *.pgm, *.pnm, *.ppm)", L"*.pbm;*.pgm;*.pnm;*.ppm", L"Portable Network Graphics Files (*.png)", L"*.png", L"Sgi Files (*.sgi)", L"*.bw;*.rgb;*.rgba;*.sgi", L"Targa Files (*.tga, *.vda, *.icb, *.vst)", L"*.tga;*.vda;*.icb;*.vst", L"Tiff Files (*.tif)", L"*.tif;*.tiff", L"Valve Texture Files (*.vtf)", L"*.vtf", L"Quake Wal Files (*.wal)", L"*.wal", L"X PixelMap (*.xpm)", L"*.xpm", L"ZSoft Pcx Files (*.pcx)", L"*.pcx", L"\0\0" }; static TCHAR *SFilter[] = { L"All Files (*.*)", L"*.*", L"C-Style Header (*.h)", L"*.h", L"Jpeg Files (*.jpe, *.jpg, *.jpeg)", L"*.jpe;*.jpg;*.jpeg", L"Microsoft Bitmap Files (*.bmp)", L"*.bmp", L"Microsoft DirectDraw Surface (*.dds)", L"*.dds", L"PhotoShop Files (*.psd)", L"*.psd", L"Portable AnyMap Files (*.pbm, *.pgm, *.ppm)", L"*.pbm;*.pgm;*.ppm", L"Portable Network Graphics Files (*.png)", L"*.png", L"Sgi Files (*.sgi)", L"*.bw;*.rgb;*.rgba;*.sgi", L"Targa Files (*.tga)", L"*.tga", L"Tiff Files (*.tif)", L"*.tif", L"ZSoft Pcx Files (*.pcx)", L"*.pcx", L"\0\0" }; static OPENFILENAME Ofn = { sizeof(OPENFILENAME), hWnd, NULL, OpenFilter, NULL, 0, 0, OpenFileName, 2048, NULL, 0, NULL, NULL, OFN_HIDEREADONLY | OFN_FILEMUSTEXIST | OFN_PATHMUSTEXIST, 0, 0, NULL, NULL, NULL, NULL }; POINT CurMouse; static POINT PrevMouse; static ILboolean MouseDown = IL_FALSE; static RECT WinSize; unsigned int currentColor = 0x80000000; unsigned int originalColor = 0x80000000; bool userClickedOK; ILclampf Red = 255, Green = 255, Blue = 255; ILubyte *AlphaChannel; ILenum Origin; switch (message) { case WM_CREATE: GenFilterString(OpenFilter, OFilter); GenFilterString(SaveFilter, SFilter); hDC = GetDC(hWnd); DragAcceptFiles(hWnd, TRUE); ReleaseDC(hWnd, hDC); break; case WM_CLOSE: #ifdef _DEBUG _CrtDumpMemoryLeaks(); #endif DestroyGDI(); DestroyWindow(hWnd); UnregisterClass(TITLE, hInstance); break; case WM_DESTROY: PostQuitMessage(0); break; case WM_PAINT: GetWindowRect(HWnd, &WinSize); // Shouldn't be here! hDC = BeginPaint(hWnd, &ps); //StretchBlt(hDC, 0, 0, WinSize.right - WinSize.left, // WinSize.bottom - WinSize.top, BackHDC, 0, 0, 1, 1, SRCCOPY); WinSize.right -= WinSize.left; WinSize.bottom -= WinSize.top; WinSize.top = 0; WinSize.left = 0; FillRect(hDC, &WinSize, BackBrush); BitBlt(hDC, XOff, YOff, (WORD)BmpInfo.biWidth, (WORD)BmpInfo.biHeight, hMemDC, 0, 0, SRCCOPY); EndPaint(hWnd, &ps); ValidateRect(hWnd, NULL); break; case WM_KEYDOWN: if (wParam == VK_ESCAPE) PostQuitMessage(0); // View the next image in the animation chain. if (wParam == VK_RIGHT) { ilBindImage(Undos[0]); // @TODO: Implement undos better with this. CurImage++; if (CurImage > ilGetInteger(IL_NUM_IMAGES)) CurImage = 0; // Go back to the beginning of the animation. ilActiveImage(CurImage); ilutRenderer(ILUT_WIN32); ResizeWin(); CreateGDI(); } if (wParam == '0') { ilBindImage(Undos[0]); // @TODO: Implement undos better with this. ilutRenderer(ILUT_WIN32); ResizeWin(); CreateGDI(); } if (wParam == '1') { ilActiveMipmap(1); ilutRenderer(ILUT_WIN32); ResizeWin(); CreateGDI(); } else if (wParam == '2') { ilActiveMipmap(2); ilutRenderer(ILUT_WIN32); ResizeWin(); CreateGDI(); } else if (wParam == '3') { ilActiveMipmap(3); ilutRenderer(ILUT_WIN32); ResizeWin(); CreateGDI(); } else if (wParam == '4') { ilActiveMipmap(4); ilutRenderer(ILUT_WIN32); ResizeWin(); CreateGDI(); } else if (wParam == '5') { ilActiveMipmap(5); ilutRenderer(ILUT_WIN32); ResizeWin(); CreateGDI(); } else if (wParam == '6') { ilActiveMipmap(6); ilutRenderer(ILUT_WIN32); ResizeWin(); CreateGDI(); } else if (wParam == '7') { ilActiveMipmap(7); ilutRenderer(ILUT_WIN32); ResizeWin(); CreateGDI(); } else if (wParam == '8') { ilActiveMipmap(8); ilutRenderer(ILUT_WIN32); ResizeWin(); CreateGDI(); } else if (wParam == '9') { ilActiveMipmap(9); ilutRenderer(ILUT_WIN32); ResizeWin(); CreateGDI(); } // View the previous image in the animation chain. if (wParam == VK_LEFT) { ilBindImage(Undos[0]); // @TODO: Implement undos better with this. CurImage--; if (CurImage < 0) CurImage = 0; ilActiveImage(CurImage); ilutRenderer(ILUT_WIN32); ResizeWin(); CreateGDI(); } if (wParam == VK_PRIOR) { if (!GetPrevImage()) break; DestroyGDI(); if (UndoSize == 0) UndoSize = 1; ilDeleteImages(UndoSize, Undos); UndoSize = 0; XOff = 0; YOff = 0; ilGenImages(1, Undos); ilBindImage(Undos[0]); //last_elapsed = SDL_GetTicks(); if (!ilLoadImage(OpenFileName)) { wsprintf(CurFileName, L"%s", OpenFileName); wsprintf(NewTitle, L"%s - Could not open %s", TITLE, OpenFileName); SetWindowText(hWnd, NewTitle); return (0L); } CurImage = 0; //cur_elapsed = SDL_GetTicks(); elapsed = cur_elapsed - last_elapsed; last_elapsed = cur_elapsed; ilutRenderer(ILUT_WIN32); ResizeWin(); CreateGDI(); wsprintf(CurFileName, L"%s", OpenFileName); wsprintf(NewTitle, L"%s - %s: %u ms", TITLE, OpenFileName, (unsigned int)elapsed); SetWindowText(hWnd, NewTitle); } if (wParam == VK_NEXT) { if (!GetNextImage()) break; DestroyGDI(); if (UndoSize == 0) UndoSize = 1; ilDeleteImages(UndoSize, Undos); UndoSize = 0; XOff = 0; YOff = 0; ilGenImages(1, Undos); ilBindImage(Undos[0]); //last_elapsed = SDL_GetTicks(); if (!ilLoadImage(OpenFileName)) { wsprintf(CurFileName, L"%s", OpenFileName); wsprintf(NewTitle, L"%s - Could not open %s", TITLE, OpenFileName); SetWindowText(hWnd, NewTitle); return (0L); } CurImage = 0; //cur_elapsed = SDL_GetTicks(); elapsed = cur_elapsed - last_elapsed; last_elapsed = cur_elapsed; ilutRenderer(ILUT_WIN32); ResizeWin(); CreateGDI(); wsprintf(CurFileName, L"%s", OpenFileName); wsprintf(NewTitle, L"%s - %s: %u ms", TITLE, OpenFileName, (unsigned int)elapsed); SetWindowText(hWnd, NewTitle); } InvalidateRect(hWnd, NULL, FALSE); break; // Moves the "viewport" case WM_MOUSEMOVE: if (!MouseDown) break; GetCursorPos(&CurMouse); XOff += CurMouse.x - PrevMouse.x; YOff += CurMouse.y - PrevMouse.y; PrevMouse.x = CurMouse.x; PrevMouse.y = CurMouse.y; InvalidateRect(hWnd, NULL, FALSE); break; case WM_LBUTTONDOWN: MouseDown = IL_TRUE; GetCursorPos(&PrevMouse); break; case WM_LBUTTONUP: MouseDown = IL_FALSE; break; case WM_DROPFILES: hDrop = (HDROP)wParam; DragQueryFile(hDrop, 0, OpenFileName, 512); DestroyGDI(); ilDeleteImages(UndoSize, Undos); UndoSize = 0; ilGenImages(1, Undos); ilBindImage(Undos[0]); ilLoadImage(OpenFileName); CurImage = 0; ilutRenderer(ILUT_WIN32); ResizeWin(); CreateGDI(); wsprintf(CurFileName, L"%s", OpenFileName); wsprintf(NewTitle, L"%s - %s", TITLE, OpenFileName); SetWindowText(hWnd, NewTitle); DragFinish(hDrop); return 0; case WM_COMMAND: FilterType = LOWORD(wParam); switch (LOWORD(wParam)) { case ID_FILE_EXIT: PostMessage(hWnd, WM_CLOSE, 0, 0); return (0L); case ID_HELP_ABOUT: DialogBox (hInstance, MAKEINTRESOURCE(IDD_DIALOG_ABOUT), hWnd, AboutDlgProc); return (0L); case ID_FILE_PROPERTIES: DialogBox (hInstance, MAKEINTRESOURCE(IDD_DIALOG_PROPERTIES), hWnd, PropertiesDlgProc); return (0L); case ID_BATCHCONVERT: DialogBox (hInstance, MAKEINTRESOURCE(IDD_DIALOG_BATCHCONV), hWnd, BatchDlgProc); return (0L); case ID_EFFECTS_COUNTCOLORS: Colours = iluColoursUsed(); TCHAR ColourString[255]; wsprintf(ColourString, L"The number of colours in this image is: %d", Colours); MessageBox(NULL, ColourString, L"Colour Count", MB_OK); return (0L); case ID_EFFECTSTOOLS_BACKGROUNDCOLOUR: //userClickedOK = FSColorPickerDoModal(¤tColor, true, &originalColor, true, 0); userClickedOK = 0; if (userClickedOK) { Red = (ILfloat)((currentColor & 0xff0000) >> 16) / 255.0f; Green = (ILfloat)((currentColor & 0xff00) >> 8) / 255.0f; Blue = (ILfloat)(currentColor & 0xff) / 255.0f; ilClearColour(Red, Green, Blue, 1.0f); } return (0L); case ID_EDIT_COPY: ilutSetWinClipboard(); return (0L); case ID_EDIT_PASTE: ILuint Test; ilGenImages(1, &Test); ilBindImage(Test); // Check if there's anything in the clipboard. if (!ilutGetWinClipboard()) { ilDeleteImages(1, &Test); return (0L); } ilDeleteImages(1, &Test); DestroyGDI(); ilDeleteImages(UndoSize, Undos); UndoSize = 0; XOff = 0; YOff = 0; ilGenImages(1, Undos); ilBindImage(Undos[0]); ilutGetWinClipboard(); wsprintf(CurFileName, L"Clipboard Paste"); wsprintf(NewTitle, L"%s - Pasted from the Clipboard", TITLE); SetWindowText(hWnd, NewTitle); //ilConvertImage(IL_BGRA); ilutRenderer(ILUT_WIN32); ResizeWin(); CreateGDI(); return (0L); // @TODO: Will probably fail if no image loaded! case ID_FILE_PRINT: /*PRINTDLG Pd; DOCINFO Di; //HDC PrintDC; //HBITMAP PrintReplace; memset(&Pd, 0, sizeof(PRINTDLG)); Pd.lStructSize = sizeof(PRINTDLG); Pd.hwndOwner = hWnd; Pd.Flags = PD_RETURNDC; Pd.nCopies = 1; Pd.nFromPage = 0xFFFF; Pd.nToPage = 0xFFFF; Pd.nMinPage = 1; Pd.nMaxPage = 0xFFFF; if (!PrintDlg(&Pd)) return (0L); Di.cbSize = sizeof(DOCINFO); Di.lpszDocName = L"DevIL Printing Test"; Di.lpszOutput = NULL; Di.lpszDatatype = NULL; Di.fwType = 0; StartDoc(Pd.hDC, &Di); StartPage(Pd.hDC); //PrintDC = CreateCompatibleDC(Pd.hDC); //PrintReplace = (HBITMAP)SelectObject(PrintDC, hBitmap); StretchBlt(Pd.hDC, 0, 0, Width * 2, Height * 2, hMemDC, 0, 0, Width, Height, SRCCOPY); EndPage(Pd.hDC); EndDoc(Pd.hDC); //DeleteObject(PrintReplace); //DeleteDC(PrintDC); DeleteDC(Pd.hDC);*/ ilutWinPrint(0, 0, ilGetInteger(IL_IMAGE_WIDTH) * 2, ilGetInteger(IL_IMAGE_HEIGHT) * 2, hDC); return (0L); case ID_FILE_LOAD: wsprintf(OpenFileName, L"*.*"); Ofn.lpstrFilter = OpenFilter; Ofn.lpstrFile = OpenFileName; Ofn.lpstrTitle = L"Open File"; Ofn.nFilterIndex = 1; Ofn.Flags = OFN_HIDEREADONLY | OFN_FILEMUSTEXIST | OFN_PATHMUSTEXIST; if (!GetOpenFileName(&Ofn)) return (0L); DestroyGDI(); if (UndoSize == 0) UndoSize = 1; ilDeleteImages(UndoSize, Undos); UndoSize = 0; XOff = 0; YOff = 0; ilGenImages(1, Undos); ilBindImage(Undos[0]); //last_elapsed = SDL_GetTicks(); if (!ilLoadImage(OpenFileName)) return (0L); CurImage = 0; //cur_elapsed = SDL_GetTicks(); elapsed = cur_elapsed - last_elapsed; last_elapsed = cur_elapsed; //iluBuildMipmaps(); //ilConvertImage(IL_RGBA, IL_UNSIGNED_BYTE); //ilEnable(IL_NVIDIA_COMPRESS); //ilEnable(IL_SQUISH_COMPRESS); //ilSetInteger(IL_DXTC_FORMAT, IL_DXT5); //free(ilCompressDXT(ilGetData(), ilGetInteger(IL_IMAGE_WIDTH), ilGetInteger(IL_IMAGE_HEIGHT), 1, IL_DXT5, &Size)); //free(ilNVidiaCompressDXT(ilGetData(), ilGetInteger(IL_IMAGE_WIDTH), ilGetInteger(IL_IMAGE_HEIGHT), 1, IL_DXT5)); ilutRenderer(ILUT_WIN32); ResizeWin(); CreateGDI(); wsprintf(CurFileName, L"%s", OpenFileName); wsprintf(NewTitle, L"%s - %s: %u ms", TITLE, OpenFileName, (unsigned int)elapsed); SetWindowText(hWnd, NewTitle); return (0L); case ID_FILE_OPENURL: if (DialogBox(hInstance, MAKEINTRESOURCE(IDD_DIALOG_FILTER), hWnd, FilterDlgProc) != TRUE) { return (0L); } DestroyGDI(); ilDeleteImages(UndoSize, Undos); UndoSize = 0; XOff = 0; YOff = 0; ilGenImages(1, Undos); ilBindImage(Undos[0]); /*if (!ilutWinLoadUrl(FilterEditString)) return (0L);*/ ilutRenderer(ILUT_WIN32); ResizeWin(); CreateGDI(); wsprintf(NewTitle, L"%s - %s", TITLE, FilterEditString); SetWindowText(hWnd, NewTitle); return (0L); case ID_FILE_SAVE: wsprintf(SaveFileName, L"monkey.tga"); Ofn.lpstrFilter = SaveFilter; Ofn.lpstrFile = SaveFileName; Ofn.lpstrTitle = L"Save File"; Ofn.nFilterIndex = 1; Ofn.Flags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT; if (!GetSaveFileName(&Ofn)) return (0L); ilEnable(IL_FILE_OVERWRITE); //ilBindImage(Undos[0]); //@TODO: Do better here... //last_elapsed = SDL_GetTicks(); ilSaveImage(SaveFileName); //cur_elapsed = SDL_GetTicks(); elapsed = cur_elapsed - last_elapsed; last_elapsed = cur_elapsed; wsprintf(CurFileName, L"%s", SaveFileName); wsprintf(NewTitle, L"%s - %s: %u ms", TITLE, SaveFileName, (unsigned int)elapsed); SetWindowText(hWnd, NewTitle); return (0L); case ID_EDIT_UNDOLEVEL: if (DialogBox(hInstance, MAKEINTRESOURCE(IDD_DIALOG_FILTER), hWnd, FilterDlgProc) == TRUE) { NumUndosAllowed = FilterParamInt <= 10 ? FilterParamInt : 10; } return (0L); case ID_EDIT_UNDO: if (UndoSize && NumUndosAllowed) { ilDeleteImages(1, &Undos[UndoSize]); ilBindImage(Undos[--UndoSize]); ResizeWin(); CreateGDI(); } return (0L); case ID_EDIT_VIEWIMAGENUM: if (DialogBox(hInstance, MAKEINTRESOURCE(IDD_DIALOG_FILTER), hWnd, FilterDlgProc) == TRUE) { ilBindImage(Undos[0]); // @TODO: Implement undos better with this. ilActiveImage(FilterParamInt); ilutRenderer(ILUT_WIN32); ResizeWin(); CreateGDI(); } return (0L); case ID_EDIT_VIEWFACE: if (DialogBox(hInstance, MAKEINTRESOURCE(IDD_DIALOG_FILTER), hWnd, FilterDlgProc) == TRUE) { ilActiveFace(FilterParamInt); ilutRenderer(ILUT_WIN32); ResizeWin(); CreateGDI(); } return (0L); case ID_EDIT_VIEWMIPMAP: if (DialogBox(hInstance, MAKEINTRESOURCE(IDD_DIALOG_FILTER), hWnd, FilterDlgProc) == TRUE) { ilActiveMipmap(FilterParamInt); ilutRenderer(ILUT_WIN32); ResizeWin(); CreateGDI(); } return (0L); case ID_EDIT_NEXT: ilBindImage(Undos[0]); // @TODO: Implement undos better with this. CurImage++; ilActiveImage(CurImage); ilutRenderer(ILUT_WIN32); ResizeWin(); CreateGDI(); return (0L); case ID_EDIT_PREV: ilBindImage(Undos[0]); // @TODO: Implement undos better with this. CurImage--; ilActiveImage(CurImage); ilutRenderer(ILUT_WIN32); ResizeWin(); CreateGDI(); return (0L); } if (++UndoSize > NumUndosAllowed) { if (NumUndosAllowed > 0) { UndoSize = NumUndosAllowed; ilDeleteImages(1, &Undos[0]); memcpy(Undos, Undos+1, NumUndosAllowed * sizeof(ILuint)); ilBindImage(Undos[UndoSize]); } } if (NumUndosAllowed > 0) { ilGetIntegerv(IL_ACTIVE_IMAGE, (ILint*)&Undos[UndoSize]); /*ilGenImages(1, &Undos[UndoSize]); ilBindImage(Undos[UndoSize]); ilCopyImage(Undos[UndoSize-1]);*/ Undos[UndoSize] = ilCloneCurImage(); ilBindImage(Undos[UndoSize]); } DestroyGDI(); switch (LOWORD(wParam)) { case ID_CONVERT_PALETTE: ilConvertImage(IL_COLOUR_INDEX, IL_UNSIGNED_BYTE); break; case ID_CONVERT_RGB: ilConvertImage(IL_RGB, ilGetInteger(IL_IMAGE_TYPE)); break; case ID_CONVERT_RGBA: ilConvertImage(IL_RGBA, ilGetInteger(IL_IMAGE_TYPE)); break; case ID_CONVERT_BGR: ilConvertImage(IL_BGR, ilGetInteger(IL_IMAGE_TYPE)); break; case ID_CONVERT_BGRA: ilConvertImage(IL_BGRA, ilGetInteger(IL_IMAGE_TYPE)); break; case ID_CONVERT_LUMINANCE: ilConvertImage(IL_LUMINANCE, ilGetInteger(IL_IMAGE_TYPE)); break; case ID_CONVERT_LUMINANCEALPHA: ilConvertImage(IL_LUMINANCE_ALPHA, ilGetInteger(IL_IMAGE_TYPE)); break; case ID_EDIT_VIEWALPHA: Origin = ilGetInteger(IL_ORIGIN_MODE); AlphaChannel = ilGetAlpha(IL_UNSIGNED_BYTE); ilTexImage(ilGetInteger(IL_IMAGE_WIDTH), ilGetInteger(IL_IMAGE_HEIGHT), ilGetInteger(IL_IMAGE_DEPTH), 1, IL_LUMINANCE, IL_UNSIGNED_BYTE, AlphaChannel); free(AlphaChannel); ilRegisterOrigin(Origin); break; case ID_EFFECTS_FLIP: iluFlipImage(); break; case ID_EFFECTS_MIRROR: iluMirror(); break; case ID_FILTER_EMBOSS: iluEmboss(); break; case ID_FILTER_EQUALIZE: iluEqualize(); break; case ID_FILTER_ALIENIFY: iluAlienify(); break; case ID_FILTER_NEGATIVE: iluNegative(); break; case ID_EFFECTS_FILTERS_EDGEDETECT_EMBOSS: iluEdgeDetectE(); break; case ID_EFFECTS_FILTERS_EDGEDETECT_SOBEL: iluEdgeDetectS(); break; case ID_EFFECTS_FILTERS_EDGEDETECT_PREWITT: iluEdgeDetectP(); break; case ID_FILTER_NOISE: if (DialogBox(hInstance, MAKEINTRESOURCE(IDD_DIALOG_FILTER), hWnd, FilterDlgProc) == TRUE) { iluNoisify(FilterParamFloat); } break; case ID_EFFECTS_FILTERS_WAVE: if (DialogBox(hInstance, MAKEINTRESOURCE(IDD_DIALOG_FILTER), hWnd, FilterDlgProc) == TRUE) { iluWave(FilterParamFloat); } break; case ID_FILTER_PIXELIZE: if (DialogBox(hInstance, MAKEINTRESOURCE(IDD_DIALOG_FILTER), hWnd, FilterDlgProc) == TRUE) { iluPixelize(FilterParamInt); } break; case ID_FILTERS_BLUR_AVERAGE: if (DialogBox(hInstance, MAKEINTRESOURCE(IDD_DIALOG_FILTER), hWnd, FilterDlgProc) == TRUE) { iluBlurAvg(FilterParamInt); } break; case ID_FILTERS_BLUR_GAUSSIAN: if (DialogBox(hInstance, MAKEINTRESOURCE(IDD_DIALOG_FILTER), hWnd, FilterDlgProc) == TRUE) { iluBlurGaussian(FilterParamInt); /*iluMatrixMode(ILU_CONVOLUTION_MATRIX); iluLoadFilter(ILU_FILTER_GAUSSIAN_5X5); iluApplyMatrix();*/ } break; case ID_FILTER_GAMMACORRECT: if (DialogBox(hInstance, MAKEINTRESOURCE(IDD_DIALOG_FILTER), hWnd, FilterDlgProc) == TRUE) { iluGammaCorrect(FilterParamFloat); } break; case ID_FILTER_SHARPEN: if (DialogBox(hInstance, MAKEINTRESOURCE(IDD_DIALOG_FILTER), hWnd, FilterDlgProc) == TRUE) { iluSharpen(FilterParamFloat, 1); } break; case ID_EFFECTS_FILTERS_ROTATE: if (DialogBox(hInstance, MAKEINTRESOURCE(IDD_DIALOG_FILTER), hWnd, FilterDlgProc) == TRUE) { iluRotate(FilterParamFloat); ResizeWin(); } break; case ID_EFFECTS_FILTERS_SCALE: HWnd = hWnd; iluImageParameter(ILU_FILTER, ILU_BILINEAR); DialogBox(hInstance, MAKEINTRESOURCE(IDD_DIALOG_RESIZE), hWnd, ResizeDlgProc); break; } CreateGDI(); InvalidateRect(hWnd, NULL, FALSE); break; default: return (DefWindowProc(hWnd, message, wParam, lParam)); } return (0L); }
void ilFCloneCurImage_(int *RetVal) { *RetVal = ilCloneCurImage(); return; }