2011-11-30 1 views
1

Canvas 클래스를 파생 시켰는데 paint 메서드에서 나는 Image을 그립니다. Command을 클릭하면 캔버스에서 직사각형과 직사각형 내부의 문자열을 그리고 싶습니다. 그래도 이미지는 사각형 뒤에 표시됩니다. 따라서 이미지를 약간 어둡게하고 싶습니다. 예를 들어, 하나는 LWUIT 대화 상자 (숨겨진 양식의 색조 색)를 표시 할 때 사용합니다. 이 상황에서 캔버스를 조금 어둡게 만드는 방법은 무엇입니까?캔버스 나 캔버스에 그려진 이미지를 어둡게하는 방법은 무엇입니까?

답변

1

이미지의 너비와 높이를 알고 있다고 가정하면 이미지 픽셀의 ARGB 값을 얻으려면 먼저 Image.getRGB을 사용하십시오.

그런 다음 RGB 값이 더 어두워 지도록 크기를 조정합니다. 배열에서

int[] darken(int[] argb, int percentage) { 
    int[] result = new int[argb.length]; 
    for (int i = 0; i <argb.length; i++) { 
     result[i] = darkenArgb(argb[i], percentage); 
    } 
    return result; 
} 

private int darkenArgb(int argb, int percentage) { 
    return darkenByte(argb, 3, 100) // keep alpha as-is 
      | darkenByte(argb, 2, percentage) 
      | darkenByte(argb, 1, percentage) 
      | darkenByte(argb, 0, percentage); 
} 

private int darkenByte(int argb, int index, int percentage) { 
    if (percentage < 0 || percentage > 100) { 
     throw new IllegalArgumentException("unexpected percentage: [" 
       + percentage + "]"); 
    } 
    if (index < 0 || index > 3) { 
     throw new IllegalArgumentException("unexpected index: [" + index + "]"); 
    } 
    int result = (argb >> index) & 0xFF; 
    result = result * percentage/100; 
    return result << index; 
} 

어둡게 영상 Image.createRGBImage

+0

무엇 darken'''에있어서 percentage' 값이어야 사용하여 제조 될 수 darken 방법으로 수득? – pheromix

+0

@pheromix 실험을 통해 알아 내야 할 것이 있습니다. 적어도 25, 50, 75 번 시도해 보았습니다. – gnat