Turbo-C
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
터보-C 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
Lua 게시판
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C/C++ Q/A
[1027] Re:API함수 StretchDIBits는 어떤 알고리즘인가요?
방태윤 [nabty] 3772 읽음    2002-08-22 13:21
도스때 프로그램 만들때의 기역을 되살려서^^

뭐 특별한 알고리즘이 있나요..그냥 축소 확대 하면 되죠?

일단 가로방향을 확대하고 세로방향으로 확대하면 되죠..

소스가 s_size 데스트가 d_size 라 할때

index table을 만듣다면

int*s_index=new int[s_size];
int*d_index=new int[d_size];
for(int i=0;i<s_size;i++) s_index[i]=i;
for(int i=0;i<d_size;i++) d_index[i]=s_index[(int)(s_size*i/d_size)];

이렇게 하면 d_index[] 가 소스에 대한 확대 인덱스 테이블이 되겠지요?...

소스의 한라인 확대 루틴

void mul_line(int *s,int*d) s=소스 d=데스트
{
    for(int i=0;i<d_size;i++){
        d[i]=s[d_index[i]];
    }
}

한라인이 확대되었으므로 같은방식으로 세로방향도 처리합니다.
세로인뎃으를 만들어서 그인덱스에 따라 한라인을 그대로 복사 삽입하면 되겠죠.
그렇게 계속 하면되겠지요?...

축소도 마찬가지구요...

인넥스를 안 만들고 할수도 있지만
이런류의 작업은 속도가 매우 중요하므로 인덱스를 만들어 써야죠..
루프에 들어가는 부분을 최적화해주셔야 할겁니다.속도차이가 엄청나지요..
보통 640*480 24비트 데이터라면 640*480*3=921600 번 푸프를 돌아야 하는데..
그안의 처리를 0.00001초 시간이 더들어가게 코딩했다면
결과는 10초나 차이가 생깁니다.^^



김인구.구야 님이 쓰신 글 :
: 비트맵을 축소/확대 해볼려고 합니다.
: API함수(StretchDIBits)를 이용하지 않고 만들어 볼려고합니다.
: 현재 비트맵파일을 DIB구조에 따라 읽는데 까지 한 상태입니다.
: 래스터 데이타를 요리하고 헤더를 수정해서 WriteFile하면 될꺼 같습니다만
: 래스터 데이타를 어떻게 요리해야할지 막막한 상태입니다...
: StretchDIBits함수는 어떤 알고리즘으로 축소/확대를 하는지 궁금합니다.
: 제가 알고리즘을 만든다는건 불가능할꺼 같기도 하고...
: 일단 StretchDIBits가 하는 방식으로 구현을 해볼려고 합니다.
: 직접 알고리즘을 만들어 보신분들의 조언을 구합니다.
: 이런 알고리즘을 생각할때
: 어디서 어떻게 시작을 해야하고 어떻게 생각을 해야하는지요...
: 당장 생각으론 제 수학 실력으론 불가능할꺼 같기도 합니다만...
:

+ -

관련 글 리스트
1025 API함수 StretchDIBits는 어떤 알고리즘인가요? 김인구.구야 2551 2002/08/22
3500     Re:API함수 StretchDIBits는 어떤 알고리즘인가요? 김인구.구야 2168 2002/08/22
3499     Re:API함수 StretchDIBits는 어떤 알고리즘인가요? 김백일.cedar 1968 2002/08/22
1027     Re:API함수 StretchDIBits는 어떤 알고리즘인가요? 방태윤 3772 2002/08/22
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.