Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <GL/glut.h> // (or others, depending on the system in use)
- #include "sgi.h"
- GLsizei w, h;
- int width, height, depth;
- unsigned char *image = NULL;
- int Status;
- void init(void);
- void reshape(int w, int h);
- void lineSegment(void);
- void mainSelect(int);
- void fileSelect(int);
- void displaySelect(int);
- void GrayScaleImage();
- void NegativeImage(); //선언
- void init(void) {
- glClearColor(1.0, 1.0, 1.0, 0.0); // Set display-window color to white.
- glMatrixMode(GL_PROJECTION); // Set projection parameters.
- gluOrtho2D(0.0, 200.0, 0.0, 150.0);
- }
- void reshape(int w, int h)
- {
- glViewport(0, 0, (GLsizei)w, (GLsizei)h);
- height = (GLint)h;
- glMatrixMode(GL_PROJECTION);
- glLoadIdentity();
- gluOrtho2D(0.0, (GLdouble)w, 0.0, (GLdouble)h);
- glMatrixMode(GL_MODELVIEW);
- glLoadIdentity();
- }
- void display(void)
- {
- glClear(GL_COLOR_BUFFER_BIT);
- glRasterPos2i(0, 0);
- glDrawPixels(width, height, GL_RGB,
- GL_UNSIGNED_BYTE, image);
- glFlush();
- }
- void mainSelect(int value)
- {
- Status = value;
- switch (value) {
- case 666:
- printf("exit\n");
- exit(0);
- break;
- }
- }
- void fileSelect(int value)
- {
- char *filename;
- Status = value;
- switch (value) {
- //이미지 추가하기.
- case 0:
- filename = "sample.rgb";
- image = read_sgi(filename, &width, &height, &depth);
- glutReshapeWindow(width, height);
- display();
- break;
- case 1:
- filename = "train.bmp";
- image = read_bmp(filename, &width, &height, &depth);
- glutReshapeWindow(width, height);
- display();
- break;
- case 2:
- filename = "desert.bmp";
- image = read_bmp(filename, &width, &height, &depth);
- glutReshapeWindow(width, height);
- display();
- break;
- }
- }
- void displaySelect(int value)
- {
- Status = value;
- switch (value) {
- case 10:
- NegativeImage();
- display();
- break;
- }
- }
- //Negative 색상을 만들어 주는 코드. 이미지 색상값을 어떻게 주느냐에 따라 r,g,b color와 Negative lmage를 만들수 있음.
- void NegativeImage() {
- int i, j;
- int r, g, b;
- for (j = 0; j<height; j++) {
- for (i = 0; i<width * 3; i = i + 3) {
- r = image[j*width * 3 + i + 0];
- g = image[j*width * 3 + i + 1];
- b = image[j*width * 3 + i + 2];
- image[j*width * 3 + i + 2] = r;
- image[j*width * 3 + i + 1] = g;
- image[j*width * 3 + i + 0] = b;
- }
- }
- }
- //GrayScale 색상을 변환해주는 코드.
- void GrayScaleImage() {
- int i, j, L;
- int r, g, b;
- for (j = 0; j<height; j++) {
- for (i = 0; i<width * 3; i = i + 3) {
- r = image[j*width * 3 + i + 0];
- g = image[j*width * 3 + i + 1];
- b = image[j*width * 3 + i + 2];
- L=(0.30*image[j*width * 3 + i + 0]) +(0.59*image[j*width * 3 + i + 1])+(0.11*image[j*width * 3 + i+ 2]);
- }
- }
- }
- void main(int argc, char** argv) {
- int fileMenu, displayMenu, mainMenu;
- glutInit(&argc, argv); // Initialize GLUT.
- glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); // Set display mode.
- // glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
- glutInitWindowPosition(50, 100); // Set top-left display-window position.
- glutInitWindowSize(300, 300); // Set display-window width and height.
- glutCreateWindow("An Example OpenGL Program"); // Create display window.
- init(); // Execute initialization procedure.
- glutDisplayFunc(display); // Send graphics to display window.
- glutReshapeFunc(reshape);
- fileMenu = glutCreateMenu(fileSelect);
- glutAddMenuEntry("sample.rgb", 0);
- glutAddMenuEntry("train.bmp", 1);
- glutAddMenuEntry("desert.bmp", 2);
- displayMenu = glutCreateMenu(displaySelect);
- glutAddMenuEntry("Negative Image", 10);
- glutAddMenuEntry("GrayScale Image", 20); //메뉴바 생성 코드.
- mainMenu = glutCreateMenu(mainSelect);
- glutAddSubMenu("File", fileMenu);
- glutAddSubMenu("Display", displayMenu);
- glutAddMenuEntry("Quit", 666);
- glutSetMenu(mainMenu);
- glutAttachMenu(GLUT_RIGHT_BUTTON);
- glutMainLoop(); // Display everything and wait.
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement