//loading textures:
void load_texture () {
if (!Form1->file_name)
return;
//Form1->file_name= "test.dcm"; //not needed anymore
if (raw_bitmap) free(raw_bitmap);
raw_bitmap = chargementImage(&Image_Width,&Image_Height);
if (raw_bitmap) {
//glDeleteTextures(1, texture_id);
//glGenTextures (1, texture_id); //(2)
//glBindTexture (0, texture_id[0]); //(2)
//glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, filter); //(2)
//glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, filter); //(2)
//glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, Image_Width, Image_Height, 0, GL_RGBA, GL_UNSIGNED_BYTE, raw_bitmap); //(2)
}
}
//------------------------------------------------------------------------------
//OpenGL Panel Init
void __fastcall TForm1::OpenGLPanel1Init(TObject *Sender)
{
glViewport(0,0,(GLsizei)OpenGLPanel1->Width,(GLsizei)OpenGLPanel1->Height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(-0.5, 0.5, -0.5, 0.5, 1., -1.); glMatrixMode(GL_MODELVIEW);
glMatrixMode (GL_MODELVIEW);
glLoadIdentity();
glClearColor (0.0, 0.0, 0.0, 1.0);
}
//---------------------------------------------------------------------------
//OpenGL Panel Resize
void __fastcall TForm1::OpenGLPanel1Resize(TObject *Sender)
{
glViewport(0,0,(GLsizei)OpenGLPanel1->Width,(GLsizei)OpenGLPanel1->Height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(-0.5, 0.5, -0.5, 0.5, 1., -1.);
glMatrixMode (GL_MODELVIEW);
glLoadIdentity();
}
//---------------------------------------------------------------------------
//OpenGL Panel Refresh (drawing)
void __fastcall TForm1::OpenGLPanel1Paint(TObject *Sender)
{
const float point_size= 0.005f;
float tempX= -0.5f, tempY=-0.5f;
int i;
glClear (GL_COLOR_BUFFER_BIT);
glEnable (GL_TEXTURE_2D);
//glDeleteTextures(1, texture_id);
glGenTextures (1, texture_id); //(1)
glBindTexture (0, texture_id[0]);
glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, Image_Width, Image_Height, 0, GL_RGBA, GL_UNSIGNED_BYTE, raw_bitmap); //(1)!!!
glPushMatrix ();
glColor3f (1.0, 1.0, 1.0);
glTranslatef(panX0+panX, panY0+panY, 0.);
glScalef(fact,fact,1.0);
glBegin (GL_QUADS);
glTexCoord2f(0.0f, 0.0f); glVertex3f(tempX, tempY, 0.);
glTexCoord2f(1.0f, 0.0f); glVertex3f(tempX+1.0F, tempY, 0.);
glTexCoord2f(1.0f, 1.0f); glVertex3f(tempX+1.0F, tempY+1.0F, 0.);
glTexCoord2f(0.0f, 1.0f); glVertex3f(tempX, tempY+1.0F, 0.);
glEnd ();
glColor3f (1.0, 0.0, 0.0);
glDisable(GL_TEXTURE_2D);
if (C1.finished) {
glBegin (GL_LINE_LOOP);
for (i=0; i<C1.nbr; ++i)
glVertex3f(C1.points[i].x,C1.points[i].y,0.);
glEnd ();
} else
for (i=1; i<C1.nbr; ++i) {
glBegin (GL_LINES);
glVertex3f(C1.points[i-1].x,C1.points[i-1].y,0.);
glVertex3f(C1.points[i].x,C1.points[i].y,0.);
glEnd();
}
glColor3f (0.0, 1.0, 0.0);
for (i=0; i<C1.nbr; ++i) {
glBegin (GL_QUADS);
glVertex3f(C1.points[i].x-point_size,C1.points[i].y-point_size,0.);
glVertex3f(C1.points[i].x-point_size,C1.points[i].y+point_size,0.);
glVertex3f(C1.points[i].x+point_size,C1.points[i].y+point_size,0.);
glVertex3f(C1.points[i].x+point_size,C1.points[i].y-point_size,0.);
glEnd ();
}
glPopMatrix ( );
}
//---------------------------------------------------------------------------
//File selection
void __fastcall TForm1::Open1Click(TObject *Sender)
{
OpenDialog1->Filter = "Dicom Images (*.dcm)|*.dcm";
if (OpenDialog1->Execute())
file_name= OpenDialog1->FileName.c_str();
load_texture ();
OpenGLPanel1->Repaint(); //It's internal to the panel, reloading paint() I presume
}