Home

[Bitmap Project] Bitmap Library - Gray Scale Filter

지난 포스팅에서 비트맵 이미지를 읽어오고 다시 쓰는 함수 readImage, writeImage를 구현하여 비트맵 파일에 접근하기가 훨씬 용이해졌다. 다양한 프로세싱이 있겠지만, 색 필터, 그중에서도 흑백필터가 가장 쉬울것 같아 도전해보았다. 왼쪽의 비트맵 파일을 오른쪽처럼 만들어 줄 예정이다! 1. Gray Scale 근데 어떻게 바꿔주지? 저 두 사진의 각 픽셀의 값들은 어떤 차이가 있을까? 사실 글쓴이는 직관적으로 그냥 이거지 않을까 하고 때려 맞추어 아래의 방법을 시도했고, 잘 맞았다. RGB에는 결국 Red의 밝기, Green의 밝기, Blue의 밝기가 저장되어 있다. 단순 1비...

Read more

[Bitmap Project] Bitmap Library

이전 포스트에서 비트맵 파일의 구조를 분석하면서 얼떨결에 비트맵 파일의 헤더와 바이너리 데이터를 읽어올때 필요할 구조체나 매크로 상수, 함수들을 만들었다. 비트맵 파일은 여러 바이너리 파일 포맷 중 단순한 포맷에 속하는 편이지만, 1바이트라도 어긋나면 정보를 읽을 수 없는 바이너리 파일의 특성상 여전히 복잡하여 읽고 쓰는 일만 하더라도 큰 작업으로 느껴진다. 적어도 나한테는 말이다. 그래서 고심끝에 비트맵 파일을 읽어오고, 쓰는 작업을 하는 모듈을 구현하기로 했다. 비트맵파일을 읽어 ASCII 코드로 바꿔주든 흑백필터를 씌우든, 바이너리 파일로부터 읽은 정보를 꺼내서 처리하기 적당한 형태로 저장해놓고, 다시 파...

Read more

[Bitmap Project] Bitmap Project

파이썬을 공부해보려고 구글링을 하던 중 코딩 도장을 발견하였다. 그동안 봐 왔던 프로그래밍 언어 기초 온라인 강의 컨텐츠들은 체계화 되어있지 않고 엉성하거나, 유료였는데 코딩도장은 (판매중인 책을 기반으로 한 듯하지만) 무료로, 잘 짜여진 구성의 글을 제공하고 있었다. ???: 다 아는 것들이네 그래도 C를 좀 오래 만져왔기 때문에 여러가지를 이미 해봤고 많이 아는 것들이었는데, 한번도 시도해보지 않았던 특이한 주제를 발견했다. C언어 코딩 도장: 81.0 실전 예제: 비트맵 파일을 아스키 아트로 변환하기 오래전에 파일 입출력을 공부해봤었고, 만들던 연습프로그램에서 데이터 저장용으로 바이너리 파일을 읽고...

Read more

[Bitmap Project] Bitmap File Analysis

Wikipedia: BMP File Format (BITMAPV5HEADER의 DIB형식을 가진 Bitmap 파일의 구조 예시이다.) 역시 wikipedia랑 나무위키만한게 없다. 1. Bitmap: DDB와 DIB Bitmap file은 크게 DDB와 DIB로 나누어진다. DDB(Device Dependent Bitmap) 윈도우즈 3.0이전에 주로 쓰임. 이미지의 크기, 색상 등 기본적인 정보와 이미지 데이터로 구성 출력장치에 의존적이다. DIB(Device Independent Bitmap) 윈도우즈 3.0부터 지원. 이미지의 크기, 색상 등 기본적인 정보와...

Read more

[BOJ] 1463번: 1로 만들기

문제 링크: https://www.acmicpc.net/problem/1463 문제 상황 정수 \(X\)에 사용할 수 있는 연산은 다음과 같이 세 가지 이다. \(X\)가 \(3\)으로 나누어 떨어지면, \(3\)으로 나눈다. \(X\)가 \(2\)로 나누어 떨어지면, \(2\)로 나눈다. \(1\)을 뺀다. 정수 \(N\)이 주어졌을 때, 위와 같은 연산 세 개를 적절히 사용해서 1을 만들려고 한다. 연산을 사용하는 횟수의 최솟값을 출력하시오. 입력 Line 1: 정수 \(N (1 ≤ N ≤ 1,000,000)\) 출력 연산을 하는 횟수의 최솟값 1. 문제해결 전략 문제를 보자마자...

Read more

avoiding Switch-Case Statement overhead: using Function Pointer

출처: https://cafe.daum.net/coders/KfIi/72 case가 많아져 if문 대신 switch-case문을 쓰게되면 내심 jump table의 오버헤드가 부담스러워졌었다. 그러다 어느날 switch-case 문을 회피하고도 비슷한 효과를 낼 수 있는 방법을 다룬 글을 보고 메모해둬야겠다고 생각하면서 글을 쓰기 시작했다. 근데 막상 더 찾아보니 [StackOverflow] [GameDev] 별로 도움이 되는 것 같지 않기도 하고… 컴파일러 최적화나 case의 개수, 분포 등에 따라 결과가 달라지니 직접 해당 케이스에 대해 시도해보고 비교해보라는 조언이 많았다. 그도 그럴 것이 사실 jump ...

Read more

[BOJ] 1931번: 회의실 배정

문제 링크: https://www.acmicpc.net/problem/1931 문제 상황 [Activity-Selection Problem] 한개의 회의실에서 열 N개의 회의의 시작, 종료 시각이 주어진다. 회의는 한번 시작하면 중간에 중단될 수 없으며, 각 회의가 겹쳐서 열릴 수 없다. (한 회의가 끝나는 것과 동시에 다음 회의가 시작될 수 있다.) 회의의 시작시간과 끝나는 시간이 같을 수도 있다. (시작하자마자 끝나는 것) 입력 Line 1: 회의의 수 \(N (1 ≤ N ≤ 100,000)\) Line 2~(N+1): 각 회의의 정보가 ((시작시각)(공백)(종료시각))의 형태로 주어진...

Read more

[BOJ] 13305번: 주유소

문제 링크: https://www.acmicpc.net/problem/13305 문제 상황 수평방향의 일직선 도로 위에 있는 \(N\)개의 도시가 있을때, 제일 왼쪽의 도시에서 가장 오른쪽의 도시로 자동차를 이용해 이동한다. 도시 간 도로의 길이(\(km\))는 서로 다를 수 있으며, 각 도시마다 하나씩 주유소가 있고 주유소의 리터당 가격(원)은 다를 수 있다. 출발 전 자동차는 기름이 없어서 주유 후 출발하며, 기름통의 크기는 무제한이다. 이 차는 \(1km\) 주행마다 \(1ℓ\)의 기름을 사용한다. 각 도시의 주유소 기름의 리터당 가격과 도시간 거리가 주어질 때, 필요한 최소의 비용을...

Read more