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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.11.2012, 13:20   #1
Гвендолин
 
Регистрация: 30.03.2009
Сообщений: 5
По умолчанию Open GL RGBtoCMYK

Помогити пожалуйста, вообщем нужно создать событие, при обработке которого будет совершаться пиксельное преобразование активного изображения (rgb в cmyk )
Я совсем не разбираюсь в указателях и в самой библиотеке. Мне удалось только загрузить картинку и воспроизвести код перевода. А как склеить эти формулы и само изображение не имею понятия.
#include "stdafx.h"
#include <math.h>
#include <stdlib.h>
#include <GL/glut.h>
#include "RgbImage.h"


void loadTextureFromFile(char *filename)
{
glClearColor (0.0, 0.0, 0.0, 0.0);
glShadeModel(GL_FLAT);
glEnable(GL_DEPTH_TEST);

RgbImage theTexMap( filename );

// Pixel alignment: each row is word aligned (aligned to a 4 byte boundary)
// Therefore, no need to call glPixelStore( GL_UNPACK_ALIGNMENT, ... );

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);

gluBuild2DMipmaps(GL_TEXTURE_2D, 3,theTexMap.GetNumCols(), theTexMap.GetNumRows(),
GL_RGB, GL_UNSIGNED_BYTE, theTexMap.ImageData() );
}

/*
* Draw the texture in the OpenGL graphics window
*/
void drawScene(void)
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glEnable(GL_TEXTURE_2D);
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);

glBegin(GL_QUADS);

glTexCoord2f(0.0, 0.0);
glVertex3f(-1.0, -1.0, 0.0);

glTexCoord2f(0.0, 1.0);
glVertex3f(-1.0, 1.0, 0.0);

glTexCoord2f(1.0, 1.0);
glVertex3f(1.0, 1.0, 0.0);

glTexCoord2f(1.0, 0.0);
glVertex3f(1.0, -1.0, 0.0);

glEnd();

glFlush();
glDisable(GL_TEXTURE_2D);
}

void resizeWindow(int w, int h)
{
float viewWidth = 1.1;
float viewHeight = 1.1;
glViewport(0, 0, w, h);
h = (h==0) ? 1 : h;
w = (w==0) ? 1 : w;
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
if ( h < w ) {
viewWidth *= (float)w/(float)h;
}
else {
viewHeight *= (float)h/(float)w;
}
glOrtho( -viewWidth, viewWidth, -viewHeight, viewHeight, -1.0, 1.0 );

glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}

void keyboard (unsigned char key, int x, int y)
{
switch (key) {
case 27:
exit(0);
break;

default:
break;
}
}

void CALLBACK display(void)
{
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );


glRasterPos2d(-4.5,-3);
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
glPixelZoom(0.5, 0.5);
glDrawPixels(image->sizeX, image->sizeY,
GL_RGB, GL_UNSIGNED_BYTE,
image->data);

auxSwapBuffers();
}
void RGB2CMYK(GLbyte r, GLbyte g, GLbyte b, GLbyte c, GLbyte m, GLbyte y, GLbyte k)
{
float R, G, B;
R = (float) r;
G = (float) g;
B = (float) b;

R = 1.0 - (R / 255.0);
G = 1.0 - (G / 255.0);
B = 1.0 - (B / 255.0);

float C, M, Y, K;
if (R < G)
{K = R;
}
else
{K = G;
}
if (B < K)
{K = B;}

C = (R - K)/(1.0 - K);
M = (G - K)/(1.0 - K);
Y = (B - K)/(1.0 - K);

C = (C * 100) + 0.5;
M = (M * 100) + 0.5;
Y = (Y * 100) + 0.5;
K = (K * 100) + 0.5;

c = (GLbyte) C;
m = (GLbyte) M;
y = (GLbyte) Y;
k = (GLbyte) K;
}


char* filename = "v.bmp";

int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH);
glutInitWindowSize(270, 270);
glutInitWindowPosition(100, 100);
glutCreateWindow(argv[0]);

loadTextureFromFile( filename );

glutDisplayFunc(drawScene);
glutReshapeFunc(resizeWindow);
glutKeyboardFunc(keyboard);
glutMainLoop();
return 0;
}

Заранее спасибо.

Последний раз редактировалось Гвендолин; 14.11.2012 в 20:03.
Гвендолин вне форума Ответить с цитированием
Старый 16.11.2012, 13:29   #2
Гвендолин
 
Регистрация: 30.03.2009
Сообщений: 5
По умолчанию

печаль...OpenGl, технология ставшая символов, Учебник в примерах.
Гвендолин вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с Open GL Arley Kinn Помощь студентам 1 16.10.2012 21:45
Open gl qsv1991 Помощь студентам 3 30.07.2012 20:35
Window.open() Kioto ASP.NET 5 07.05.2012 07:50
open() Qaliti JavaScript, Ajax 4 06.03.2012 15:03
Open GL, C++ Алина_258 Помощь студентам 6 18.06.2011 18:53