vtk问题之二,解决马上结帖,up有分!

Morgan_ma 2003-10-25 11:38:16
为什么我用vtkBMPReader读入的任何bmp文件,在显示的时候图像表面像蒙了一层黑纱?(图像看得见而且显示正确)


急。。。
...全文
263 23 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
Morgan_ma 2003-10-28
  • 打赏
  • 举报
回复
asett1(asett1),我按照你的代码,一摸一样的,还是同样的问题,我受不了了。。。救命啊。。。
ljzcom 2003-10-28
  • 打赏
  • 举报
回复
关注中。。。
asett1 2003-10-28
  • 打赏
  • 举报
回复
你先试试我的代码吧,用VTKImageViewer比 vtkRenderer 高效简洁,并且可以方便调整window level/center
asett1 2003-10-28
  • 打赏
  • 举报
回复
就这几句话 :
VTKBMPReader* reader = VTKBMPReader::New();
reader->SetFileName("test.bmp");
VTKImageViewer* view = VTKImageViewer::New();
view->SetInput(reader->GetOutput());
View->SetSize(1024,768);
view->GetActor2D()->SetPosition(0,0);//should be calculate by image size
view->Render();
reader->Delete();
view->Delete();
Morgan_ma 2003-10-28
  • 打赏
  • 举报
回复
vtkBMPReader *br = vtkBMPReader::New();
br->SetFileName(dlg.GetPathName());
br->SetNumberOfScalarComponents(3);
br->Update();
//int test = br->GetDepth();
// map to graphics library
vtkImageMapper *map = vtkImageMapper::New();
map->SetInput(br->GetOutput());

// actor coordinates geometry, properties, transformation
vtkActor2D *aBMP = vtkActor2D::New();
aBMP->SetMapper(map);
//aBMP->GetProperty()->SetDisplayLocationToBackground();

// a renderer and render window
vtkRenderer *ren = vtkRenderer::New();
vtkRenderWindow *renWin = vtkRenderWindow::New();
renWin->AddRenderer(ren);

// an interactor
vtkRenderWindowInteractor *iren = vtkRenderWindowInteractor::New();
iren->SetRenderWindow(renWin);

// add the actor to the scene
ren->AddActor2D(aBMP);
ren->SetBackground(255,255,255); // Background color white

// render an image (lights and cameras are created automatically)
renWin->Render();


麻烦你帮我看看这个代码有什么问题吗?
Morgan_ma 2003-10-28
  • 打赏
  • 举报
回复
还是不行啊,我试过了,24位的位图还是有这个问题的,asett1(asett1)你是怎么调用显示的?
asett1 2003-10-28
  • 打赏
  • 举报
回复
我刚才试了一下vtkBMPReader,显示8位、24位完全正常,我用的是4.3版
可能是原来的版本有bug,你可以加上 这一句看看

reader->SetNumberOfScalarComponents(3);
看看
,或者试试前面说的几个函数
Morgan_ma 2003-10-28
  • 打赏
  • 举报
回复
呵呵。。。接受批评,分数送上。。。 ^_^
asett1 2003-10-28
  • 打赏
  • 举报
回复
reader没有问题,view->SetColorWindow(230);
view->SetColorLevel(140);就是调整window level/center的,反映到彩色
图象就是亮度、对比度、色饱和度。
你用鼠标就可以直接调整啊,多直观! 或者自己改改这两个数值啊。

钻研能力太差, -_-

重新下载源码,nightly 版的,cmake
Morgan_ma 2003-10-28
  • 打赏
  • 举报
回复
解决了,谢谢,不过能解释一下那两个函数麽?vtk的文档解释的不清楚,还有,我觉得有点治标不治本,因为显示出来的淡蓝色编程了绿色。我怀疑的reader有问题。


另外怎么升级lib?重新下载源码,cmake?
asett1 2003-10-28
  • 打赏
  • 举报
回复
VTKBMPReader* reader = VTKBMPReader::New();
reader->SetFileName("test.bmp");
VTKImageViewer* view = VTKImageViewer::New();
view->SetInput(reader->GetOutput());
view->SetColorWindow(230);
view->SetColorLevel(140);
View->SetSize(1024,768);
view->GetActor2D()->SetPosition(0,0);//should be calculate by image size
view->Render();
reader->Delete();
view->Delete();

再不行只能升级lib了,或者到vtk的mail list里去找,这类问题d都有答案的
Morgan_ma 2003-10-27
  • 打赏
  • 举报
回复
谢谢提示,我再实验一下
Morgan_ma 2003-10-27
  • 打赏
  • 举报
回复
我用vtkBMPReader *br = vtkBMPReader::New();
br->SetFileName(dlg.GetPathName());

得到该图像后,马上调用Depth()函数,返回值是8,说明只能显示256色,那如何才能显示24位的呢?
flinming 2003-10-27
  • 打赏
  • 举报
回复
up
asett1 2003-10-27
  • 打赏
  • 举报
回复
估计是你的bmp位图位数不对。VTKBmpReader缺省是256色的?你的图象可能都是24位的吧。
另外还有 data mask, swap data,big endian/little endian这几个参数设置一下。
如果都没有问题,就是你的image mapper有问题了,调整一下window level/window center。

我用vtkjpegreader 缺省都是只能正确显示256色图象,不知道VTKBmpReader是不是这样?
yaoha2003 2003-10-26
  • 打赏
  • 举报
回复
把黑色乘以xx%,然与你的图相与
wqs6 2003-10-26
  • 打赏
  • 举报
回复
是把像素点的灰度值存到相应的数组中!
Morgan_ma 2003-10-26
  • 打赏
  • 举报
回复
int i,j;
for(j = Extent[2]; j<= Extent[3]; j++)
{
for(i = Extent[0]; i<= Extent[1]; i++)
{
unsigned char* pTemp;
pTemp = (unsigned char*)(imageData->GetScalarPointer(i,j,0));
gray[j*1024+i] = *pTemp;

}
}



这个部分是把象素点一个个存到数组里吗?
wqs6 2003-10-26
  • 打赏
  • 举报
回复
BOOL CCH1_3Doc::OnOpenDocument(LPCTSTR lpszPathName)
{
if (!CDocument::OnOpenDocument(lpszPathName))
return FALSE;
seedNum = 0;
orgPath = lpszPathName;

// TODO: Add your specialized creation code here
if(bmpReader == NULL)
bmpReader = vtkBMPReader::New();

bmpReader->SetFileName(lpszPathName);
bmpReader->Update();
imageData = bmpReader->GetOutput();

//获取图象灰度,图象大小
imageData->GetExtent(Extent);

memset(gray,0,1024*1024);
ASSERT(gray);

int i,j;
for(j = Extent[2]; j<= Extent[3]; j++)
{
for(i = Extent[0]; i<= Extent[1]; i++)
{
unsigned char* pTemp;
pTemp = (unsigned char*)(imageData->GetScalarPointer(i,j,0));
gray[j*1024+i] = *pTemp;

}
}

UpdateAllViews(NULL);

return TRUE;
}

很有可能是unsigned char* 的问题,你试试看吧。
这里有我读文件的源码。
Morgan_ma 2003-10-26
  • 打赏
  • 举报
回复
谢谢。。。我的是Morgan_Ma_MVP@msn.com
加载更多回复(3)

19,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧