반응형
==========================================================================
이 글은 이론적으로 아는 것을 직접 설명 및 구현을 해 봄으로써 제 자신의
실력을 다지기 위한 글 입니다. 물론 정확한 이론. 용어도 아님을 밝힙니다.
이 글을 직.간접적으로 사용함으로써 발생되는 모든 불이익을 책임지지 않습니다.
문의점, 오류, 잘못된 용어들은 저의 홈페이지 Work 게시판을 이용하여 주시고
이상의 사항에 대하여는 최대한 덧글 ( 코멘트 ) 를 이용해 주십시오.
본 글은 저의 홈페이지인 http://ggaman.com 과
싸이월드의 (JPSC) JAVA program study club 에서 보실수 있습니다.
homepage : http://ggaman.com e-mail n MSN : chan at ggaman.com
200300904 - Chan
==========================================================================
자세한 설명은 소스에 포함 되어 있습니다.
이 글은 이론적으로 아는 것을 직접 설명 및 구현을 해 봄으로써 제 자신의
실력을 다지기 위한 글 입니다. 물론 정확한 이론. 용어도 아님을 밝힙니다.
이 글을 직.간접적으로 사용함으로써 발생되는 모든 불이익을 책임지지 않습니다.
문의점, 오류, 잘못된 용어들은 저의 홈페이지 Work 게시판을 이용하여 주시고
이상의 사항에 대하여는 최대한 덧글 ( 코멘트 ) 를 이용해 주십시오.
본 글은 저의 홈페이지인 http://ggaman.com 과
싸이월드의 (JPSC) JAVA program study club 에서 보실수 있습니다.
homepage : http://ggaman.com e-mail n MSN : chan at ggaman.com
200300904 - Chan
==========================================================================
자세한 설명은 소스에 포함 되어 있습니다.
001: /*
002: * Created on 2003-09-04
003: *
004: * To change the template for this generated file go to
005: * Window>Preferences>Java>Code Generation>Code and Comments
006: */
007:
008: import java.io.*;
009:
010: /**
011: * @author Chan
012: *
013: * To change the template for this generated type comment go to
014: * Window>Preferences>Java>Code Generation>Code and Comments
015: */
016: public class GifInfo {
017:
018: int width = 0; // 그림의 넓이를 저장할 변수
019: int height = 0; // 그림의 높이를 저장할 변수
020: int left = 0; // 그림의 왼쪽 시작점을 저장할 변수
021: int top = 0; // 그림의 오른쪽 시작점을 저장할 변수
022: boolean usingLocalColorMap = false; // 사용자 정의 칼라 맵의 사용 여부
023: boolean interlace = false; // 인터레이스의 여부
024:
025: byte temp[] = new byte[2];
026: int temp2;
027:
028:
029: File f;
030: FileInputStream fs;
031:
032: /** Gif에서 이미지의 정보는 가장 앞에 위치하는 나오는
033: *
034: * "," ( 0x2C) 다음에 순서대로 배치되게 되어 있다.
035: *
036: * , 뒤의
037: * 처음의 2byte는 그림의 왼쪽 시작 위치,
038: * 다음 2byte는 그림의 위쪽 시작 위치,
039: * 다음 2byte는 그림의 넓이(폭),
040: * 다음 2byte는 그림의 높이,
041: * 다음의 1 byte에서
042: * 상위 1bit는 LocalColorMap 의 사용 여부
043: * 다음 1bit는 인터레이스의 유무
044: * 다음 1bit는 sort의 유무 ( ColorMap 사용시 색깔순으로 정렬 부분 )
045: * 다음 2bit는 예약 되어 있고 ( 차후를 위해서 남겨 준것 같음 )
046: * 다음 3bit는 LocalColorMap의 사이즈가 들어 간다.
047: */
048: GifInfo(File f) {
049: try {
050: this.f = f;
051: fs = new FileInputStream(this.f);
052:
053: // 0x2C가 나올때까지 read로 통과 시킴
054: while(fs.read() != Byte.parseByte("44"));
055:
056:
057: // 2byte를 읽어 들여서 비트 연산을 통해서
058: // 2byte 형의 값을 int 형으로 만든다.
059: // 여기서 보면 두번째 값( temp[1] )을
060: // 상위로 보내고 첫번째 값( temp[0] )을 하위에 붙여서
061: // int 형으로 만드는데 , 이는 저장될때 반대로 저장되었기 때문에
062: // 거꾸로 값을 붙여 주어서 제대로 만드는 부분이다.
063:
064: // 그림의 왼쪽 시작 위치 구함.
065: fs.read(temp);
066: left = left | temp[1];
067: left = left << 8;
068: left = left | temp[0];
069:
070:
071: // 그림의 위쪽 시작 위치 구함.
072: fs.read(temp);
073: top = top | temp[1];
074: top = top << 8;
075: top = top | temp[0];
076:
077: // 그림의 넓이 구함
078: fs.read(temp);
079: width = width | temp[1];
080: width = width << 8;
081: width = width | temp[0];
082:
083: // 그림의 높이 구함
084: fs.read(temp);
085: height = height | temp[1];
086: height = height << 8;
087: height = height | temp[0];
088:
089:
090: // 마지막으로 1byte의 값을 bit AND 연산 시켜서
091: // 각 자리의 값을 확인하고 설정해 준다.
092: temp2 = fs.read();
093: if ( (temp2 & 64) == 64 ) interlace = true;
094: else if ( (temp2 & 128 ) == 128) usingLocalColorMap = true;
095:
096:
097: }catch(Exception e){
098: System.out.println(e.toString());
099: }
100:
101: }
102: /** 그림 이름 리턴 */
103: public String getGifFileName() {
104: return f.getName();
105: }
106:
107: /** 그림의 넓이(폭) 리턴 */
108: public int getWidth() {
109: return width;
110: }
111:
112: /** 그림의 높이 리턴 */
113: public int getHeight() {
114: return height;
115: }
116:
117: /** 그림의 인터레이스 유무 리턴 */
118: public boolean isInterlace() {
119: return interlace;
120: }
121:
122: /** 그림의 LocalColorMap 사용 유무 리턴 */
123: public boolean isLocalColorMap() {
124: return usingLocalColorMap;
125: }
126:
127:
128: public static void main(String[] args) {
129: File f = new File("c:\\a.gif");
130: GifInfo gi = new GifInfo(f);
131:
132: System.out.println("그림의 이름은 : "+gi.getGifFileName());
133: System.out.println("그림의 높이는 : " +gi.getHeight());
134: System.out.println("그림의 넓이는 : " +gi.getWidth());
135: System.out.print("인터레이스 유무 : ");
136: if ( gi.isInterlace() ){
137: System.out.println("인터레이스");
138: } else {
139: System.out.println("인터레이스 아님");
140: }
141:
142: System.out.print("LocalColorMap 사용 유무 : ");
143: if (gi.isLocalColorMap()) {
144: System.out.println("사용");
145: } else {
146: System.out.println("미사용");
147: }
148: }
149: }
반응형
'공부 > 컴퓨터' 카테고리의 다른 글
Thread 과 Runnable의 비교. (2) | 2003.09.13 |
---|---|
객체지향 설계 쉽게 생각하기 (0) | 2003.09.05 |
더블 링크드 리스트 (0) | 2003.09.04 |
환형 Queue (0) | 2003.08.28 |
Queue (0) | 2003.08.27 |