看板 Knuckles
作者 標題 DIP作業四
時間 2007年12月10日 Mon. PM 10:40:39
讀取助教給的文字檔ballon.txt
轉為圖檔的方法:
int ch,i=0,count=0;
char tmp[10]={0};
int size[2]={0}; //size[0]=width, size[1]=height
FILE *fp = fopen("ballon.txt","r");
if(!fp){ printf("read file error!"); return; }
//先將檔案開頭的width與height讀進size
while(1){
ch = getc(fp); //依序讀取一個字元存進ch
if(ch != ',' && ch !='\n'){
tmp[i] = ch; //ch為數字時,先依序存進tmp
i++;
}else{ //ch為','或'\n'時,將tmp由char轉為int
size[count]=atoi(tmp); //存進size
count++;
for(i=0;i<10;i++) tmp[i]=0; //清空tmp
i=0;
}
if(ch == '\n') break; //ch為換行字元就結束
}
printf("width=%d,height=%d\n",size[0],size[1]);
CImage img1;
int width = size[0];
int height = size[1];
img1.Create(width,height,24);
i=0;
count=0; //代表目前為第幾個pixel
int k=0; //代表目前為pixel的哪一個顏色(0:red,1:green,2:blue)
int x,y; //代表目為的pixel為第y列、第x行
BYTE value[3];
//將色彩值存進img1
while(1){
ch = getc(fp); //依序讀取一個字元存進ch
if(ch != ',' && ch != '\n' && ch != EOF){
tmp[i] = ch; //ch為數字時,先依序存進tmp
i++; //讀下一個字元
}else{ //ch為','、'\n'或EOF時,將tmp由char轉為int
value[k] = atoi(tmp); //存進value
k++; //讀下一個色彩值
for(i=0;i<10;i++) tmp[i]=0; //清空tmp
i=0;
}
if(ch == '\n'){ //ch為換行字元時,將得到的三個色彩值存進img1
x = count%width; //求出目前的pixel為圖檔的第幾行(column)
y = count/width; //求出目前的pixel為圖檔的第幾列(row)
img1.SetPixel(x,y,RGB(value[0],value[1],value[2]));
count++; //讀下一個pixel
k=0;
}
if(ch == EOF) break; //ch為檔案結尾即結束
}
fclose(fp); //關閉檔案
img1.SaveBmpFile("image.bmp");
printf("已將文字檔轉為圖檔,檔名為:image.bmp\n");--
※ 來源: 台大電信 DISP 實驗室 (http://disp.twbbs.org)
※ 作者: Knuckles 來自: 140.112.175.130 時間: 2007-12-10 22:40:39
※ 編輯: Knuckles 來自: 140.112.175.130 時間: 2009-05-31 15:19:19
※ 編輯: Knuckles 時間: 2010-10-23 04:41:48 來自: 111-248-0-184.dynamic.hinet.net
※ 看板: KnucklesNote 文章推薦值: 0 目前人氣: 0 累積人氣: 570
回列表(←)
分享