顯示廣告
隱藏 ✕
看板 Knuckles
作者 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 
※ 文章分類: 程式設計 C/C++
分享網址: 複製 已複製
r)回覆 e)編輯 d)刪除 M)收藏 ^x)轉錄 同主題: =)首篇 [)上篇 ])下篇