Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Звук, графика и видео > работа с матрицей цвета


Автор: Альберт 28.12.2005, 05:12
нужно с помощью матрицы цвета преобразовать 24-битный битмап и вывести на форму.
примерный код у меня есть. просто хотелось бы сравнить. может кто-нибудь скинуть какой-нибудь код по этой теме.


и еще проблема: отчего юнит (использующий openGL) работает на одних машинах и неверно работает на других?

Автор: Zero 28.12.2005, 10:09
Цитата
нужно с помощью матрицы цвета преобразовать 24-битный битмап и вывести на форму.

Преобразовать каво и в чаво?
Цитата
и еще проблема: отчего юнит (использующий openGL) работает на одних машинах и неверно работает на других?

Версия модуля разная...

Автор: Альберт 28.12.2005, 17:29
ну например хотя бы инвертировать битмап

Автор: s-mike 29.12.2005, 08:15
Цитата
ну например хотя бы инвертировать битмап

С помощью Bitmap.Pixels или Bitmap.Scanline. В FAQ должны быть примеры по этой теме.

Автор: Альберт 30.12.2005, 02:51
надо сделать это, используя glcolortable.

вот примерный код
ошибка возникает в строчке
glColorTable(GL_COLOR_TABLE, GL_RGB, 256, GL_RGB,GL_UNSIGNED_byte,@colorTable);

пока понять причину не могу, т.к. вроде бы все параметры процедуры стандартны

помогите пожалуйста узнать хотя бы возможные причины этой ошибки

Код

procedure make_ct;
var
   i: integer;
   colortable: array [0..255,0..2] of glubyte;
begin
   for i:=0 to 256 do
   begin
         colorTable[i,0]:=255-i;
         colorTable[i,1]:=255-i;
         colorTable[i,2]:=255-i;
   end;
end;

procedure init_alization;
var
//   i: integer;
   colortable: array [0..255,0..2] of glubyte;
begin

      image:=auxDIBImageLoada('Bitmapp1.bmp');

      glColorTable:=wglGetProcAddress('glColorTable');  

      glPixelStorei(GL_UNPACK_ALIGNMENT,1); 
      glClearColor(0,0,0,0);


      make_ct; 


      glColorTable(GL_COLOR_TABLE, GL_RGB, 256, GL_RGB,GL_UNSIGNED_byte,@colorTable); 
      glEnable(GL_COLOR_TABLE);
end;


procedure deinit;
begin
   dispose(image);
end;

procedure reshape(w,h: integer);
begin
      glViewport(0,0,w,h);
      glMatrixMode(GL_PROJECTION);
      glLoadIdentity();
      gluOrtho2D(0,500,0,500);
end;

procedure display;
begin
      glClear(GL_COLOR_BUFFER_BIT);
      glRasterPos2i(1,1);
      glDrawPixels(image^.sizeX, image^.sizeY, GL_RGB,GL_UNSIGNED_BYTE, image^.data);
      glFlush();
end;

procedure main_colortable;

begin

   glutInitDisplayMode(GLUT_SINGLE or GLUT_RGB);
   glutInitWindowSize(300,300);
   glutCreateWindow('Пример изменения изображения с помощью цветовой таблицы');
   init_alization;
   glutDisplayFunc(display); 
   glutReshapeFunc(reshape);
   glutMainLoop();
   deinit;

end;

Автор: Альберт 3.1.2006, 21:57
программа заработала, правда не на всех машинах. с чем это может быть связано???

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)