- Код: Выделить всё
- void Paint()
 {
 COLORREF *pvbits;
 pvbits = (COLORREF *)malloc(240*240*4); //массив пикселей изображения
 for (int j=0; j<240; j++) //конвертируем все пиксели изображения из цветных в grayscale
 {
 for (int i=0; i<240; i++)
 {
 BYTE* pPixel = (BYTE *)(&pvbits[i+240*j]);
 int rgb = ((11*pPixel[0]+30*pPixel[2]+59*pPixel[1])/100);
 pPixel[0]=rgb;
 pPixel[1]=rgb;
 pPixel[2]=rgb;
 }
 }
 free(pvbits);
 }
остальную часть кода я опускаю. Помогите перевести этот код на Паскаль. Я пробовал реализовывать эту функцию с использованием SetPixel & GetPixel, но изображение в таком случае обрабатывается очень долго.
P.S.
Кому нужно даю весь код:
- Код: Выделить всё
- void onPaint(HWND hWnd)
 {
 HGDIOBJ bmp, oldbmp;
 HDC hdc, hdc2, ScreenDC;
 PAINTSTRUCT ps;
 BITMAPINFO bmi;
 COLORREF *pvbits;
 pvbits = (COLORREF *)malloc(240*240*4); //массив пикселей изображения
 bmi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER); //создаем структуру, хранящую данные об изображении
 bmi.bmiHeader.biHeight = 240;
 bmi.bmiHeader.biWidth = 240;
 bmi.bmiHeader.biPlanes = 1;
 bmi.bmiHeader.biBitCount = 32;
 bmi.bmiHeader.biCompression = BI_RGB;
 bmi.bmiHeader.biSizeImage=0;
 bmi.bmiHeader.biClrUsed=0;
 bmi.bmiHeader.biClrImportant=0;
 hdc = BeginPaint(hWnd, &ps);
 ScreenDC = GetDC(0);
 hdc2 = CreateCompatibleDC(NULL);
 bmp = CreateDIBSection(hdc2, &bmi, DIB_RGB_COLORS, (VOID **)&pvbits, NULL, 0x0);
 oldbmp = SelectObject(hdc2, bmp);
 BitBlt(hdc2, 0, 0, 240, 240, ScreenDC, 0, 0, SRCCOPY);
 for (int j=0; j<240; j++) //конвертируем все пиксели изображения из цветных в grayscale
 {
 for (int i=0; i<240; i++)
 {
 BYTE* pPixel = (BYTE *)(&pvbits[i+240*j]);
 int rgb = ((11*pPixel[0]+30*pPixel[2]+59*pPixel[1])/100);
 pPixel[0]=rgb;
 pPixel[1]=rgb;
 pPixel[2]=rgb;
 }
 }
 BitBlt(hdc, 0, 0, 240, 240, hdc2, 0, 0, SRCCOPY); //выводим полученное на экран
 EndPaint(hWnd, &ps);
 SelectObject(hdc2, oldbmp);
 DeleteDC(hdc2);
 DeleteObject(bmp);
 ReleaseDC(hWnd, ScreenDC);
 free(pvbits);
 }




