2014-10-30 10 views
0

흑백 이미지의 getRGB 함수에서 얻은 픽셀을 부호없는 바이트로 변환하려고 시도 했으므로 잘못된 값일 경우 getRGB 함수를 다음과 같이 읽었습니다. 자바 정수 값을 반환합니다, 그래서 내가 할 0에서 255 사이의 값을 음수가 아닌 정수 값을 볼 수 있습니다. 나는 이것을 성공 시키려고 노력했다 :자바에서 픽셀을 int에서 부호없는 바이트로 변환

int width; 
    int height; 
    byte extract; 
    int asign; 
    int matrix[][]; 

for (i = 0; i < height; i++) 
    { 
     for (j = 0; j < width; j++) 
     { 
      extract =(byte)(xray.getRGB(j, i)); 
      asign = (int)extract; 
      //asign = asign & 0xff; 
      asign = asign + 128; 
      matrix[i][j] = asign; 


     } 
    } 

xray는 유력한 이미지이다. 이 문제에 대해 도움을 주실 수 있기를 바랍니다. 마스크로 시도한 것을 볼 수 있듯이, 캐스트 후에 값에 128을 추가하려고 시도했습니다.

답변

0

글쎄 getRGB()int을 서명했지만, 알파와 R, G, B 값을 나타내는 32 비트는 int입니다. 가장 중요한 바이트는 알파이며, 완전히 불투명 한 경우 255가됩니다. 즉, 결국 전체가 음수 인 int이됩니다. 당신이 알파 값을 마스크하려면

, 당신은 상위 바이트를 제거합니다

matrix[i][j] = xray.getRGB(j,i) & 0xFFFFFF; 

와 함께 할 수 있습니다. 이렇게하면 픽셀의 RGB 값을 포함하는 단일 양수 값이 남습니다.

나중에 처리 할 때주의하십시오. 픽셀의 색상을 나중에 설정하려고하면 알파 값을 0으로 설정하면됩니다 (이제 마스크를 해제 했으므로). 그래서 당신은 완전히 투명한 (일명 보이지 않는) 무언가로 끝날 것입니다.

흑백 이미지이고 어떤 이유로 인해 -128에서 127 사이의 값만 표시되는 경우 동일한 트릭이 적용되어 서명이 없습니다. '그것이 작동하려면 코드에서 else, 당신은 돈 - 이것은 당신이 어떤 if 필요하지 않습니다 의미

: 사실 위와 동일 라인은 그것을 할 것입니다,하지만 당신은 또한 마스크를 단축 할 수 extract 또는 asign 개의 변수가 필요합니다.

+0

감사를보십시오, 나는 임 그것으로 작업하는 이미지, 그것은 흑백 이미지의 경우,이 매트릭스를 포함 supossed이 행렬의 모든 값을 가지고있어, 또 다른 질문이 있습니다 0에서 255 사이에 있어야하며, 맞습니까? 내 질문은 여기에, 그것은 내부적으로 컴퓨터가 여전히 4 채널 (알파, 빨강, 녹색, 파랑) 또는 단지 하나의 채널을 볼 수 있다면, 즉, 픽셀은 4 개의 값으로 구성됩니다, 아니면 하나 ??? –

+0

@LaloGalicia * 저장 될 수 있습니다 *. 결국 전체 화면의 픽셀 데이터로 변환해야하지만 RGB가됩니다. 요즘, 무거운 짐을 많이 그래픽 카드와 CPU가 그것에 대해 걱정할 필요가 완료되면 가져옵니다. 따라서 내부적으로 의미하는 바에 달려 있습니다 * : 여러 레이어가 있습니다! –

+0

덕분에 @ chiastic-security, 나는 당신이 내게 말한 것을 시도 할 것이고, 당신이 내 결과를 알리게 할 것이다 : D –

0

extract =(byte)(xray.getRGB(j, i)); 
    if(extract < 0){ 
     asign = extract + 256; // Add the total number of values in byte if extract is negative 
    } 
    else{ 
     asign = extract;  // You don't need to type cast it to int explicitly 
    } 
    matrix[i][j] = asign; 
+0

고마워, 나는 시도 할 것이다. 저는 Im이 그것을 다루는 이미지 인 경우, 흑백 이미지이고, 행렬을 포함하고이 행렬의 모든 값은 0에서 255 사이의 값이어야합니다. 맞습니까? 내 질문은 여기에, 그것은 내부적으로 컴퓨터가 여전히 4 채널 (알파, 빨강, 녹색, 파랑) 또는 단지 하나의 채널을 볼 수 있다면, 즉, 픽셀은 4 개의 값으로 구성됩니다, 아니면 하나 ??? –