全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:2559
推到 Plurk!
推到 Facebook!

讀圖檔會出現錯誤..寫入txt文件會變亂碼

答題得分者是:taishyang
astro0803
一般會員


發表:18
回覆:30
積分:9
註冊:2007-05-28

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-10-18 08:49:30 IP:122.123.xxx.xxx 訂閱
其實我是在做將圖像的處理,在處理方面沒問題,之後我想說要當程式處理完後直接用image元件將圖示show出,而不是要再去資料夾裡開圖檔。
可是我一要去做這個動作(Image1->Picture->LoadFromFile("lena256Out.bmp");)他就會出錯
,我發現好像是因為一開始在處理的時候這個新的圖檔他的資料大小都為0,處理完的時候也是為0,直到我把執行畫面關掉,資料才會寫進去的樣子,不知道這樣該怎麼解決???

另外這程式我還寫一個要去讀圖的灰階值,之後把他寫入txt文件裡,寫到txt文件裡都變成亂碼,但我有用memo出來看,直接在memo上show出則不會,不知道這又是怎麼一回事???

下面是我自己寫的程式碼,因為我知道我說話表達的一向不好,所以直接把程式碼po上可能會比較方便一點。
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-10-18 09:45:17 IP:122.124.xxx.xxx 未訂閱
你忘了
fclose(fp1);
fclose(fp2);

astro0803
一般會員


發表:18
回覆:30
積分:9
註冊:2007-05-28

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-10-18 14:15:29 IP:122.123.xxx.xxx 訂閱
恩~我一時忘了........
另外那麼寫到txt文件變亂碼是怎麼回事???
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#4 引用回覆 回覆 發表時間:2007-10-18 14:28:51 IP:122.124.xxx.xxx 未訂閱
像素的範圍是BYTE不是char

===================引 用 astro0803 文 章===================
恩~我一時忘了........
另外那麼寫到txt文件變亂碼是怎麼回事???
astro0803
一般會員


發表:18
回覆:30
積分:9
註冊:2007-05-28

發送簡訊給我
#5 引用回覆 回覆 發表時間:2007-10-18 15:41:15 IP:122.123.xxx.xxx 訂閱
t大,可以請您跟我說一下例如怎麼改嗎?因為您這樣說我有點不太懂!!
下面為此部份的程式碼:

[code cpp]
FILE *fp1,*fp2;
int a,gray[256];
fp1=fopen("lena256.bmp","rb");
fp2=fopen("lena256Out.txt","wb");

for(int i=0;i<1078;i ){
a=getc(fp1);
}

for(int i=0;i<256;i ){
gray[i]=0;
}
for(int h=0;h<256;h ){
for(int w=0;w<256;w ){
a=getc(fp1);
gray[a] ;
}
}
for(int i=0;i<256;i ){
putc(gray[i],fp2);
}
fclose(fp1);
fclose(fp2);

[/code]
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#6 引用回覆 回覆 發表時間:2007-10-18 16:33:13 IP:122.124.xxx.xxx 未訂閱
你要的是文字檔而不是二進制檔
[code cpp]
FILE *fp1,*fp2;
int a,gray[256];
fp1=fopen("lena256.bmp","rb");
fp2=fopen("baseOut.txt","w");
//去檔頭
for(int i=0;i<1078;i ){
a=getc(fp1);
}
//設定各灰階值的初始數量
for(int i=0;i<256;i ){
gray[i]=0;
}
for(int h=0;h<256;h ){
for(int w=0;w<256;w ){
a=getc(fp1);
gray[a] ;
}
}
for(int i=0;i<256;i ){
//putc((Byte)gray[i],fp2);
fprintf(fp2, "%d\n", gray[i]);
Memo1->Lines->Add(gray[i]);
}
fclose(fp1);
fclose(fp2);
[/code]
jow
尊榮會員


發表:66
回覆:751
積分:1253
註冊:2002-03-13

發送簡訊給我
#7 引用回覆 回覆 發表時間:2007-10-18 16:40:21 IP:210.66.xxx.xxx 訂閱
(1)開啟 binary file 寫到 binary file 看到的當然是像亂碼的資料, 
我想只是在Memo 中, 被用其他符號來標示無法顯示的字元.

(2)這段程式碼好像沒有什麼用途, 只是讀出1078個Byte而已,
我猜目的應該是by-pass掉 bitmap 的 Header 吧? 可以直接
用seek比較好... ^^

for(int i=0;i<1078;i ){
a=getc(fp1);
}


(3)這段程式碼應該是要Initial gray[ ], 可以直接用 memset().
for(int i=0;i<256;i ){
gray[i]=0;
}

(4)循序讀取來源檔案, 總長度為 256 x 256,
然後以讀到的資料作為 gray[ ] 陣列的索引註腳(script)
然後該位置的計數加1, 好像在統計 0~255的各自的數目?

for(int h=0;h<256;h ){
for(int w=0;w<256;w ){
a=getc(fp1);
gray[a] ;
}


(5)將統計好的結果寫出檔案.
for(int i=0;i<256;i ){
putc(gray[i],fp2);



純粹個人看法, 僅供參考.........^_^
編輯記錄
jow 重新編輯於 2007-10-18 16:42:18, 註解 無‧
astro0803
一般會員


發表:18
回覆:30
積分:9
註冊:2007-05-28

發送簡訊給我
#8 引用回覆 回覆 發表時間:2007-10-18 16:40:32 IP:122.123.xxx.xxx 訂閱
多謝t大的幫忙....我試出來了,不過我覺得觀念上有點想不懂,您說得意思是指原本我用putc()是一次存放一個byte的資料,所以是將二進位的值存到txt文件。所以要改用fprintf()來格式化字串,讓變數的值視為整數,之後再將資料存到txt文件,是這樣的意思嗎???
不管如何,實在感謝t大您的幫忙........

關於j大所提出的第四點,沒錯,我就是在計算0~255之間的值,因為這張圖片是一張256灰階的圖,因為我要去計算這張圖片的灰階值,所以才會這樣做。另外想請問的是,關於第二點,您說建議我直接用seek,不知道該怎麼用,不知你可不可以教我一下^^。

我知道我很弱,但我不能因此害怕

編輯記錄
astro0803 重新編輯於 2007-10-18 16:55:25, 註解 無‧
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#9 引用回覆 回覆 發表時間:2007-10-18 16:46:03 IP:122.124.xxx.xxx 未訂閱
你應該先弄清楚你要的到底是[text file]還是[binary file]
編輯記錄
taishyang 重新編輯於 2007-10-18 16:46:42, 註解 無‧
taishyang 重新編輯於 2007-10-18 16:47:40, 註解 無‧
系統時間:2024-05-05 7:53:24
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!