2014-11-13 3 views
0

Ierba 라이브러리를 사용하여 DICOM 파일을 읽습니다. 낮은 수준에서 수정할 수 있도록 픽셀에 대한 액세스가 필요합니다. 문서는 말한다 : "이미지의 픽셀에 액세스하려면 사용자가 데이터 핸들러를 검색 할 수 있습니다"를 예를 들어 거기 :Imebra 라이브러리를 사용하여 DICOM 파일의 이미지 픽셀을 수정하는 방법은 무엇입니까?

imbxUint32 rowSize, channelPixelSize, channelsNumber; 
ptr<imebra::handlers::dataHandlerNumericBase> myHandler = presentationImage->getDataHandler(true, &rowSize, &channelPixelSize, &channelsNumber); 

// Retrieve the image's size in pixels 
imbxUint32 sizeX, sizeY; 
presentationImage->getSize(&sizeX, &sizeY); 

// Scan all the rows 
imbxUint32 index(0); 
for(imbxUint32 scanY = 0; scanY < sizeY; ++scanY) 
{ 
    // Scan all the columns 
    for(imbxUint32 scanX = 0; scanX < sizeX; ++scanX) 
    { 
      // Scan all the channels 
      for(imbxUint32 scanChannel = 0; scanChannel < channelsNumber; ++scanChannel) 
      { 
      imbxInt32 channelValue = myHandler->getSignedLong(index++); 

        // Do something with the channel's value 
        //-------------------------------------- 
      } 
    } 

} 내가 presentationImage 객체의 픽셀이 변경 될 필요가. 나는 그런 식으로 그것을 변경하려고했습니다 :

myHandler->setSignedLong(index,255); 

그러나 그것은 presentationImage 객체를 변경하지 않습니다. Imebra 문서에는 세 가지 예제 만 있으며 클래스 및 메소드 설명은 약간 원시입니다. Google은 아무 것도 모른다. 이 개체의 픽셀 값을 변경하는 방법은 무엇입니까?

+0

라이브러리를 모르지만 문서를 빨리 ​​열람하면 'true'를 getDataHandler 함수에 전달해야 함을 나타냅니다. 문서에서 - 응용 프로그램이 버퍼에 쓰기를 원하면 true이고, 그렇지 않으면 false입니다. "그 호출에서'true'를 전달하려 했습니까? – pstrjds

+0

예, 죄송합니다. 나는 그것을했다. 그러나 진실 된 변화는 아무것도 가지지 않고있다. 여기에 잘못된 사본이 있습니다. 지금 바로 수정. – maskotky

답변

1

버퍼를 수정하면 압축되지 않은 이미지가 수정됩니다. 원래의 dicom 구조에는 여전히 압축 된 이미지가 포함되어 있습니다. 당신이 dataHandlerdataset::setImage를 사용하여 데이터 세트에 다시 이미지를 넣어야 할 파일 DICOM에서 이미지를 대체하기 위해

(데이터가 dataHandler가 파괴 된 경우에만 이미지에 기록) 범위를 벗어나
+0

이미지 객체'presentationImage'에서 픽셀을 수정하는 방법은 무엇입니까? 왜'myHandler-> setSignedLong (index, 255);'는'presentationImage'를 변경하지 않습니까? – maskotky

관련 문제