OPENGL和GUI用哪个好? 小弟要做毕业设计,题目是做个简单的图像处理软件,实现模糊,锐化,纹理等功能,我想问问用OpenGL做合适还是GUI合适?它们哪个容易上手一点?哪个适合做平面图像的处理? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我想不管你用什么开发,模糊,锐化等图象处理功能应该都有图象算法,这个与opengl和gdi的关系不大另外,我觉得二维图象应该是gdi开发好些,3维建摸才用opengl 这些功能只用GDI+做就行了,方便快捷, 我觉得如果做毕业设计就要做一些出彩的东西,如果光是做点这种老套的东西没有什么新意,最后审核的时候也没加分的地方.同样是这些东西如果你加入GPU通用计算加速就不一样了,会让评审觉得你能够紧跟时代.所以用OpenGL或者DirectX都可以 你的问题只是跟算法有关,不用opengl也可以做的。opengl是一套图形开发工业标准,楼主所说的应该是图像处理 感觉opengl主要是用来开发三维的 因为不用涉及到3维图像的处理,你的是处理平面图像所以用GDI比较好!void TiDuRuiHuaDib::Menxianruihua(){ LPBYTE p_data; //原图数据区指针 int wide,height; //原图长、宽 p_data=this->GetData (); wide=this->GetWidth (); height=this->GetHeight (); if (m_pBitmapInfoHeader->biBitCount<9) //灰度图像 { LPBYTE p_temp=new BYTE [wide*height]; //开辟图像一缓冲区 memset(p_temp,255,wide*height); //初始化为255 int temp; for(int j=1;j<height-1;j++) for(int i=1;i<wide-1;i++) { //根据双向一次微分公式计算当前像素的灰度值 temp=(int)sqrt((p_data[wide*j+i]-p_data[wide*j+(i-1)])* (p_data[wide*j+i]-p_data[wide*j+(i-1)])+(p_data[wide*j+i]-p_data[wide*(j-1)+i])* (p_data[wide*j+i]-p_data[wide*(j-1)+i])); if (temp>=30) { if((temp+100)>255) p_temp[wide*j+i]=255; else p_temp[wide*j+i]=temp+100; } if (temp<30) p_temp[wide*j+i]=p_data[wide*j+i]; } //将缓冲区中的图像复制回原图数据区 memcpy(p_data,p_temp,wide*height); //删除缓冲区 delete p_temp; } else //24位彩色 { int DibWidth; //原图长、宽、字节宽 DibWidth=this->GetDibWidthBytes(); //取得原图的每行字节数 BYTE *p_temp=new BYTE[height*DibWidth]; for(int j=1;j<height-1;j++) // 每行 { for(int i=3;i<DibWidth-3;i++) // 每列 { int pby_pt1=0,pby_pt2=0,pby_pt=0; pby_pt1=p_data[DibWidth*j+i]-p_data[DibWidth*j+(i-3)]; pby_pt2=p_data[DibWidth*j+i]-p_data[DibWidth*(j-1)+i]; pby_pt=(int)sqrt(pby_pt1*pby_pt1+pby_pt2*pby_pt2); if (pby_pt>=30) { if((pby_pt+100)>255) p_temp[DibWidth*j+i]=255; else p_temp[DibWidth*j+i]=pby_pt+100; } if (pby_pt<30) p_temp[DibWidth*j+i]=p_data[DibWidth*j+i]; } } memcpy(p_data,p_temp,height*DibWidth); // 复制处理后的图像 delete []p_temp; //删除暂时分配内存 }}这是一个门限锐化的代码,希望对LZ能有帮助! Gui的源码可以找到很多,而且实现简单 Socket发送字符串问题 对话框类如何获得文档类指针 如何获得另一个控件中的内容 问个问题:如果序列化保存时,需要保存句柄怎么办?谢谢 打印与打印预览 需要一个ntddk.h文件,哪位朋友给贴一下,谢谢! 串口循环读失败……求救! 请问使用FTP从客户端到服务器上传文件要用到哪些命令? 对话框的相关问题 谁能提供一个DBGrid控见使用的例子,my e_mail:lixia_zhang@hotmail谢谢!! 取记录集的问题(vc6.0连接mysql) 最经典的30个笑话,有点长耐心看~``
另外,我觉得二维图象应该是gdi开发好些,3维建摸才用opengl
同样是这些东西如果你加入GPU通用计算加速就不一样了,会让评审觉得你能够紧跟时代.
所以用OpenGL或者DirectX都可以
opengl是一套图形开发工业标准,楼主所说的应该是图像处理
void TiDuRuiHuaDib::Menxianruihua()
{
LPBYTE p_data; //原图数据区指针
int wide,height; //原图长、宽
p_data=this->GetData ();
wide=this->GetWidth ();
height=this->GetHeight ();
if (m_pBitmapInfoHeader->biBitCount<9) //灰度图像
{
LPBYTE p_temp=new BYTE [wide*height]; //开辟图像一缓冲区
memset(p_temp,255,wide*height); //初始化为255
int temp;
for(int j=1;j<height-1;j++)
for(int i=1;i<wide-1;i++)
{
//根据双向一次微分公式计算当前像素的灰度值
temp=(int)sqrt((p_data[wide*j+i]-p_data[wide*j+(i-1)])*
(p_data[wide*j+i]-p_data[wide*j+(i-1)])+(p_data[wide*j+i]-p_data[wide*(j-1)+i])*
(p_data[wide*j+i]-p_data[wide*(j-1)+i]));
if (temp>=30)
{
if((temp+100)>255)
p_temp[wide*j+i]=255;
else
p_temp[wide*j+i]=temp+100;
}
if (temp<30)
p_temp[wide*j+i]=p_data[wide*j+i];
}
//将缓冲区中的图像复制回原图数据区
memcpy(p_data,p_temp,wide*height);
//删除缓冲区
delete p_temp;
}
else //24位彩色
{
int DibWidth; //原图长、宽、字节宽
DibWidth=this->GetDibWidthBytes(); //取得原图的每行字节数
BYTE *p_temp=new BYTE[height*DibWidth];
for(int j=1;j<height-1;j++) // 每行
{
for(int i=3;i<DibWidth-3;i++) // 每列
{
int pby_pt1=0,pby_pt2=0,pby_pt=0;
pby_pt1=p_data[DibWidth*j+i]-p_data[DibWidth*j+(i-3)];
pby_pt2=p_data[DibWidth*j+i]-p_data[DibWidth*(j-1)+i];
pby_pt=(int)sqrt(pby_pt1*pby_pt1+pby_pt2*pby_pt2);
if (pby_pt>=30)
{
if((pby_pt+100)>255)
p_temp[DibWidth*j+i]=255;
else
p_temp[DibWidth*j+i]=pby_pt+100;
}
if (pby_pt<30)
p_temp[DibWidth*j+i]=p_data[DibWidth*j+i];
}
}
memcpy(p_data,p_temp,height*DibWidth); // 复制处理后的图像
delete []p_temp; //删除暂时分配内存
}
}
这是一个门限锐化的代码,希望对LZ能有帮助!