如何開一張圖 |
尚未結案
|
JASONWAR
一般會員 發表:8 回覆:21 積分:5 註冊:2002-08-31 發送簡訊給我 |
|
JASONWAR
一般會員 發表:8 回覆:21 積分:5 註冊:2002-08-31 發送簡訊給我 |
|
taishyang
站務副站長 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
JASONWAR您好:
引言: 還有忘ㄌ請版主介紹一些初學者適合ㄉ書...要有關vcl元件ㄉ介紹請參考下面連結: http://delphi.ktop.com.tw/forum.asp?FORUM_ID=81 基本上每本都會有VCL元件的介紹< > 順心< > |
brant
一般會員 發表:1 回覆:64 積分:23 註冊:2003-04-07 發送簡訊給我 |
引言: 修改完執行後還是出現原來ㄉ錯誤ㄝ:(我都照JerryKuo前輩ㄉ說明做ㄌ) project project48.exe raised exception class EStackOverflow with message 'stack overflow'.Process stopped. Use Step or run to continue.還是用一個大大的 int Array 去讀檔嗎? 之前不是建議您改用 pointer 嗎? 不然就直接用 vcl 的 class 來處理讀檔 或是一個一個 byte 讀出來直接設到 canvas 裡的 rgb 值 總之就是不要一個大大的 512*512 的 Array 你最原本的問題就是 Array 太大了 |
JASONWAR
一般會員 發表:8 回覆:21 積分:5 註冊:2002-08-31 發送簡訊給我 |
引言:可是JerryKuo前輩不是試ㄌ可以執行沒問題ㄇ而且我不太會用指標ㄝ..引言: 修改完執行後還是出現原來ㄉ錯誤ㄝ:(我都照JerryKuo前輩ㄉ說明做ㄌ) project project48.exe raised exception class EStackOverflow with message 'stack overflow'.Process stopped. Use Step or run to continue.還是用一個大大的 int Array 去讀檔嗎? 之前不是建議您改用 pointer 嗎? 不然就直接用 vcl 的 class 來處理讀檔 或是一個一個 byte 讀出來直接設到 canvas 裡的 rgb 值 總之就是不要一個大大的 512*512 的 Array 你最原本的問題就是 Array 太大了 |
JASONWAR
一般會員 發表:8 回覆:21 積分:5 註冊:2002-08-31 發送簡訊給我 |
|
taishyang
站務副站長 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
JASONWAR您好:
引言: 這一行:Image1->Canvas->Pixels[i][j]=(TColor)RGB(clr,clr,clr); 他是怎ㄇ讀ㄉ到Pixels[i][j]ㄉ,然後怎樣顯示圖片出來ㄉ....希望您不要介意,您還沒走的穩就想跑的快這樣是很危險的... BCB的教學網站您可以參考下面連結: http://www.ccit.edu.tw/~ichung/teach/c /index.htm 順心 |
brant
一般會員 發表:1 回覆:64 積分:23 註冊:2003-04-07 發送簡訊給我 |
引言:他的環境跟你的環境不一樣吧? 也許這跟 compiler 的一些參數,或是版本有關,天知道! 如果怕用指標,那你先把 int 改成 unsigned char,什麼參數設定都沒改過的話用 int 真的是超過 stack 了所以系統就丟給你 stack overflow。 你可以試試看,開一個空的 project,在 main 裡面只寫 int test[512][512] 然後寫 test[0][0] = 1; (這行是避免 compiler 自動把沒用到的變數拿掉。) build 完後一執行,馬上丟給你 stack overflow。 用 unsigned char 就不至於 stack overflow,但宣告過大的變數總是不好的, 趕緊學會一種替代方案吧,加油 [> 發表人 -引言:可是JerryKuo前輩不是試ㄌ可以執行沒問題ㄇ而且我不太會用指標ㄝ..引言: 修改完執行後還是出現原來ㄉ錯誤ㄝ:(我都照JerryKuo前輩ㄉ說明做ㄌ) project project48.exe raised exception class EStackOverflow with message 'stack overflow'.Process stopped. Use Step or run to continue.還是用一個大大的 int Array 去讀檔嗎? 之前不是建議您改用 pointer 嗎? 不然就直接用 vcl 的 class 來處理讀檔 或是一個一個 byte 讀出來直接設到 canvas 裡的 rgb 值 總之就是不要一個大大的 512*512 的 Array 你最原本的問題就是 Array 太大了 |
JerryKuo
版主 發表:42 回覆:571 積分:322 註冊:2003-03-10 發送簡訊給我 |
JASONWAR你好:
針對你的問題回答
1.重新建立一個project
2.拉一個Button和一個Image在預設的Form1上
3.點兩下button,會出現
void __fastcall TForm1::Button1Click(TObject *Sender)的函數
{
}
4.把下面的code放在大括號{ }裡,compiler完,執行.ok
5.如果再不行,呃~呃~呃~.....sorry,我己江郎才盡..
---------------------------------------------------------------------
FILE *fp;
int i,j
int temp_eng[512][512];/*忘了改*/
char clr; fp=fopen("lena","rb"); for (j=0;j<512;j )
{
for (i=0;i<512;i )
{
fread(&temp_eng[i][j],1,1,fp);
clr = temp_eng[i][j];
Image1->Canvas->Pixels[i][j]=(TColor)RGB(clr,clr,clr);
}
}
fclose(fp);
--------------------------------------------------------------------- 如果可以執行,表示你之前的想法是對的沒錯^^,只是不太會用bcb,畢竟你是post
在about c 的版上。其實這樣的寫法效率很差,秀出圖的速度很慢(因為多年前
我就是這樣寫的.哈哈),做影像處理時也不實用,這個程式可以當作入門玩玩
,要進階的話就要參考
|
JASONWAR
一般會員 發表:8 回覆:21 積分:5 註冊:2002-08-31 發送簡訊給我 |
|
JerryKuo
版主 發表:42 回覆:571 積分:322 註冊:2003-03-10 發送簡訊給我 |
JASONWAR你好 unsigned char等於 byte 數值範圍:0 ~ 255
所以矩陣的值可以做加減(但要確定兩值相加不會超過255)
不能做乘除,如果要做乘除或超出範圍的相加,在矩陣前加個(int)
如下
int value;
value = ((int)temp_eng[12][34] (int)temp_eng[56][78])/2; 確定value小於255,才可以放回矩陣
temp_eng[12][34] = (unsigned char)value; ^^
|
sun33
一般會員 發表:1 回覆:1 積分:0 註冊:2008-08-01 發送簡訊給我 |
===================引 用 taishyang 文 章=================== JASONWAR您好: 我的BCB是5.0版所以我無法開啟您的專案檔 我的方式您參考看看,我測試過並沒有問題 byte pixel[300000]="0"; byte color; int x,y; int count=0; if (OpenDialog1->Execute()) { TMemoryStream* ima = new TMemoryStream(); ima->LoadFromFile(OpenDialog1->FileName); BYTE bBuf=0; for (int i=0;i < ima->Size;i ) { ima->Position=i; bBuf=i; ima->Read(&bBuf,1); pixel[i]=bBuf; } delete ima; } for (y=0;y<512;y ) { for (x=0;x<512;x ) { color=pixel[count]; SetPixel(Image1->Canvas->Handle, x,y,TColor(RGB(color,color,color))); count ; } }上面的方式可以達到您的需求... 但只要作些許的改變便可以讀取任何RAW Data的影像 順心 發表人 - taishyang 於 2003/04/07 20:34:00 BYTE bBuf=0; for (int i=0;i < ima->Size;i ) { ima->Position=i; bBuf=i; ima->Read(&bBuf,1); pixel[i]=bBuf; } 想請問為什麼這邊要這樣寫,要先這樣讀 麻煩大哥傳授 |
taishyang
站務副站長 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |