forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   C++ (http://forum.boolean.name/forumdisplay.php?f=22)
-   -   openGL загрузить изображение и улучшить качество (http://forum.boolean.name/showthread.php?t=15679)

KingMaks 19.10.2011 11:12

openGL загрузить изображение и улучшить качество
 
В общем смысл таков: нужно на C++ builder 6 с помощью openGL загрузить изображение, а затем улучшить его качество или для начала хотя бы повысить яркость. Как я понял существуют определенные алгоритмы. Но я не представляю как это реализовать. Получается при загрузке картинки мне, вроде как, придется обратиться к каждому её пикселю и изменить его, или работать с Z буфером.
Может кто представляет как это сделать или имеет ссылки на какие либо статьи? Всем заранее благодарен.:)

dsd 19.10.2011 12:37

Ответ: openGL загрузить изображение и улучшить качество
 
Повысить яркость на 10 процентов в красном канале: прочитать цвет пикселя умножить его 1.1. Потом найти остаток от деления на 256 записать обратно.
Нечто напоминающее повышение контрастности изображения: считать цвет.
узнать (double) цветпикселя/(double)255. Возвести полученную величину в некоторую степень и умножить исходную часть цвета на эту величину.

Сблюрить можно обработав пиксели маской введенной вручную или посчитанной по формуле гаусовского блюра если хочется контроля и т.д.

.Squid 19.10.2011 13:09

Ответ: openGL загрузить изображение и улучшить качество
 
Цитата:

Сообщение от dsd (Сообщение 206288)
Повысить яркость на 10 процентов в красном канале: прочитать цвет пикселя умножить его 1.1. Потом найти остаток от деления на 256 записать обратно.

(255.0 * 1.1) % 256 = 24.5
FFFFFFFUUUUUUUU

dsd 19.10.2011 13:15

Ответ: openGL загрузить изображение и улучшить качество
 
Да ни в жисть не поверю что великий и могучий Сквид не догадаося что значения большие 255 надо сделать равными 255

.Squid 19.10.2011 13:25

Ответ: openGL загрузить изображение и улучшить качество
 
Я то догадался. А вот твоя фраза "Потом найти остаток от деления на 256 записать обратно." говорит о том, что ты не догадался. Или проводишь диверсионную деятельность.

KingMaks 19.10.2011 13:57

Ответ: openGL загрузить изображение и улучшить качество
 
Здесь все понятно. Но как все-таки к пикселю обратиться или перерисовать его??

dsd 19.10.2011 14:17

Ответ: openGL загрузить изображение и улучшить качество
 
http://www.codenet.ru/progr/opengl/opengl_05.php
Почему бы не погуглить на эту тему?

dsd 19.10.2011 14:40

Ответ: openGL загрузить изображение и улучшить качество
 
Цитата:

Сообщение от .Squid (Сообщение 206295)
Я то догадался. А вот твоя фраза "Потом найти остаток от деления на 256 записать обратно." говорит о том, что ты не догадался. Или проводишь диверсионную деятельность.

Каюсь. Косноязычен. :facepalm:

Mr_F_ 19.10.2011 16:11

Ответ: openGL загрузить изображение и улучшить качество
 
если быть мужыком, то быстрее менять цвета пикселей шейдером.

.Squid 19.10.2011 16:35

Ответ: openGL загрузить изображение и улучшить качество
 
Цитата:

Сообщение от Mr_F_ (Сообщение 206308)
если быть мужыком, то быстрее менять цвета пикселей шейдером.

Да, добей чувака. OpenCL или CUDA еще предложи.

RegIon 20.10.2011 17:41

Ответ: openGL загрузить изображение и улучшить качество
 
НУ CUDA ведь программируется на С,и SDK есть в открытом:-D

KingMaks 25.10.2011 00:53

Ответ: openGL загрузить изображение и улучшить качество
 
Есть код загрузки картинки:
Код:

#include <windows.h>

#include <GL/gl.h>
#include <GL/glu.h>
#include <GL/glaux.h>


AUX_RGBImageRec* image;


void CALLBACK resize(int width,int height)
{
  glViewport(0,0,width,height);
  glMatrixMode( GL_PROJECTION );
  glLoadIdentity();
  glOrtho(-5,5, -5,5, 2,12);
  gluLookAt( 0,0,5, 0,0,0, 0,1,0 );
  glMatrixMode( GL_MODELVIEW );
}



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


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



void main()
{
        float pos[4] = {3,3,3,1};
        float dir[3] = {-1,-1,-1};

        image = auxDIBImageLoad("igor.bmp");

   
    glEnable(GL_ALPHA_TEST);
    glEnable(GL_DEPTH_TEST);
    glEnable(GL_COLOR_MATERIAL);
    glEnable(GL_LIGHTING);
    glEnable(GL_LIGHT0);
    glEnable(GL_BLEND);
    glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

    glLightfv(GL_LIGHT0, GL_POSITION, pos);
    glLightfv(GL_LIGHT0, GL_SPOT_DIRECTION, dir);


       

    auxInitPosition( 50, 10, 400, 400);
    auxInitDisplayMode( AUX_RGB | AUX_DEPTH | AUX_DOUBLE );
    auxInitWindow( "Photo" );
    auxIdleFunc(display);
    auxReshapeFunc(resize);
        auxMainLoop(display);
}

получаю ошибки:
[Linker Error] Unresolved external 'auxSwapBuffers' referenced from C:\USERS\KINGMAKS\DESKTOP\INDIVID\PHOTO.OBJ
[Linker Error] Unresolved external 'auxDIBImageLoadA' referenced from C:\USERS\KINGMAKS\DESKTOP\INDIVID\PHOTO.OBJ
[Linker Error] Unresolved external 'auxInitPosition' referenced from C:\USERS\KINGMAKS\DESKTOP\INDIVID\PHOTO.OBJ
[Linker Error] Unresolved external 'auxInitDisplayMode' referenced from C:\USERS\KINGMAKS\DESKTOP\INDIVID\PHOTO.OBJ
[Linker Error] Unresolved external 'auxInitWindowA' referenced from C:\USERS\KINGMAKS\DESKTOP\INDIVID\PHOTO.OBJ
[Linker Error] Unresolved external 'auxIdleFunc' referenced from C:\USERS\KINGMAKS\DESKTOP\INDIVID\PHOTO.OBJ
[Linker Error] Unresolved external 'auxReshapeFunc' referenced from C:\USERS\KINGMAKS\DESKTOP\INDIVID\PHOTO.OBJ
[Linker Error] Unresolved external 'auxMainLoop' referenced from C:\USERS\KINGMAKS\DESKTOP\INDIVID\PHOTO.OBJ

в чем проблема?

.Squid 25.10.2011 01:15

Ответ: openGL загрузить изображение и улучшить качество
 
В том, что саму либу не подключил.

impersonalis 25.10.2011 01:30

Ответ: openGL загрузить изображение и улучшить качество
 
Цитата:

Сообщение от .Squid (Сообщение 206838)
В том, что саму либу не подключил.

да-да: ошибка компоновки (линковки - Linker Error): наличествующий код успешно транслирован в объектные-файлы (модули), однако, компоновщик не нашёл модули библиотеки, чтобы собрать всё воедино.

HolyDel 25.10.2011 01:43

Ответ: openGL загрузить изображение и улучшить качество
 
#pragma comment(lib,"glaux.lib")


Часовой пояс GMT +4, время: 09:49.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot