🔥 연습문제 - 슬라이스로 그레이스케일 이미지 만들기

237자
3분

Go 언어에서는 슬라이스를 활용해 그레이스케일 이미지를 쉽게 만들 수 있습니다. 이번 예제에서는 Pic 함수를 구현하여 슬라이스를 이용해 그레이스케일 이미지를 생성해 보겠습니다.

Pic 함수는 dxdy라는 두 개의 정수 매개변수를 받습니다. 이 함수는 dy 길이의 슬라이스를 반환하는데, 각 요소는 dx 길이의 8비트 부호 없는 정수 슬라이스입니다. 프로그램을 실행하면 Pic 함수가 반환한 슬라이스를 이용해 그레이스케일(정확히는 블루스케일) 값으로 해석하여 이미지를 표시합니다.

이미지의 선택은 여러분에게 달려 있습니다. 흥미로운 함수로는 (x+y)/2, x*y, x^y 등이 있습니다.

[][]uint8 안에 각 []uint8을 할당하려면 반복문을 사용해야 합니다.

타입 변환을 위해서는 uint8(intValue)를 사용하면 됩니다.

아래는 Pic 함수를 구현한 예제 코드입니다:

package main
 
import "golang.org/x/tour/pic"
 
func Pic(dx, dy int) [][]uint8 {
    // 바깥 슬라이스 생성
    picture := make([][]uint8, dy)
 
    // 안쪽 슬라이스를 바깥 슬라이스의 각 요소에 할당
    for y := range picture {
        picture[y] = make([]uint8, dx)
 
        // 각 픽셀의 값 계산
        for x := range picture[y] {
            picture[y][x] = uint8((x+y)/2) // (x+y)/2 함수 사용
        }
    }
 
    return picture
}
 
func main() {
    pic.Show(Pic)
}
 
go

위 코드에서는 먼저 make 함수를 사용하여 dy 길이의 바깥 슬라이스인 picture를 생성합니다. 그리고 for 반복문을 사용하여 picture의 각 요소에 dx 길이의 안쪽 슬라이스를 할당합니다.

이중 for 반복문을 사용하여 각 픽셀의 값을 계산합니다. 여기서는 (x+y)/2 함수를 사용하여 그레이스케일 값을 계산하였습니다. 계산된 값은 uint8 타입으로 변환하여 해당 픽셀에 할당됩니다.

마지막으로 완성된 picture 슬라이스를 반환하면, main 함수에서 pic.Show 함수를 호출하여 생성된 이미지를 표시할 수 있습니다.

  • (x + y) / 2

lecture image

  • x * y

lecture image

  • x ^ y

lecture image