보자 우선이 달성의 몇 가지 방법이 있다는 것을 말한다. 내가 사용하여 이미지의 크기를 얻을 말할 것
(같은)이 3 가지 형식 중 하나가 될 수 있기
int myHeight = myImage.getHeight();
int myWidth = myImage.getWidth();
난 당신이 또한 비트 맵 '설정을 확인 할 수 있습니다이 경우에 말할 것
ALPHA_8, ARGB_8888, or RGB_565
당신은
myImage.getConfig()
루틴을 사용하여 구성을 얻을. 나중에 어떻게 사용해야하는지 다시 살펴 보겠습니다. 이제 다음과 같이 이중 루프 구조를 실행해야합니다 이미지의 크기를 알고
:
돌아 가기 픽셀이 회색조 경우 테스트하는 방법에
boolean isGrayscaleImage = true; // assume it is grayscale until proven otherwise
for(int i = 0; i < myWidth; i++){
for(int j = 0; j < myHeight; j++){
int currPixel = myImage.getPixel(i, j);
if(false == isGrayScalePixel(currPixel)){
isGrayscaleImage = false;
break;
}
}
}
: 이미지가 ALPHA_8이 저장되어있는 경우 실제로 그레이 이미지 아니지만, 그것은 기술적으로 ARGB_8888 화상으로 화상을 회전하여 원래 내에 마련된 알파 값을 알파 내지 0xFF 값과 R, G의 각, 및 B 성분을 설정하여 하나로 변환 될 수있다 8 비트 ALPHA_8 기반 이미지.
이미지가 RGB_565로 포맷 된 경우 Shift 및 MASKING 연산자를 사용하여 R, G 및 B 값을 직접 자신의 바이트로 분리해야하기 때문에 다소 까다 롭습니다. 이 작업을 마치면 기본적으로 ARGB_8888 이미지 처리와 같습니다 (아래에서 설명). ARGB_8888 이미지에 대한
: 알파 채널은 항상 0xFF로해야한다.
당신이 당신의 질문에 명시된 바와 같이 R == SO G의 ==의 B (과 같을 샘플 코드는 다음) 경우 픽셀은 그레이 스케일로 간주됩니다
boolean isGrayScalePixel(int pixel){
int alpha = (pixel && 0xFF000000) >> 24;
int red = (pixel && 0x00FF0000) >> 16;
int green = (pixel && 0x0000FF00) >> 8;
int blue = (pixel && 0x000000FF);
if(0 == alpha && red == green && green == blue) return true;
else return false;
}
가 만들어 질 수 최적화,하지만 난 주 알고리즘을 문서화하려고합니다.
희망이 당신을 도와줍니다 :-)
그게 내가 한 일이지만 그레이 스케일 이미지의 픽셀은 다른 값을 가지며, 같은 생각을해야한다고 생각합니다. 그게 내 문제 야. – SamuSan
음 ......... 이것은 귀하의 질문이 무엇인지를 확인하는 방법입니다. 실제 이미지가 있습니까? 이미징 응용 프로그램에서 열어 보았고 그레이 스케일이 아닌 색이 있는지 보려면 확대 했습니까 ??? – trumpetlicks
확대/축소 또는 다른 다른 조작없이 이미지를로드 한 직후 이미지의 사전 처리 단계로 확인을 적용합니다. 이 이미지를 Matlab과 함께 열면 하나의 레이어 만있는 이미지로 발견되었으며 0에서 255 사이의 픽셀을 가진 회색 음영 이미지 (색인 된 색상 이미지 아님)입니다. – SamuSan