線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2003
推到 Plurk!
推到 Facebook!

有人可以幫我看看程式碼怎麼改才能印出一張image嗎

答題得分者是:senso
crowneva
一般會員


發表:4
回覆:10
積分:2
註冊:2009-07-27

發送簡訊給我
#1 引用回覆 回覆 發表時間:2009-10-19 13:52:20 IP:114.47.xxx.xxx 訂閱

[code delphi]
AnsiString FileName;
FILE *fp;
SaveDialog1->Filter = "文字文件 (*.txt)|*.TXT";
SaveDialog1->DefaultExt="txt";

if(SaveDialog1->Execute())
{
FileName = SaveDialog1->FileName;
}
fp = fopen(FileName.c_str(),"w");

int M[10],Hei,Wid,up,down,left,right,zz;
Graphics::TBitmap *Bmp = new Graphics::TBitmap();
Byte *tptr;
Byte *uptr;
Byte *dptr;
Bmp->Assign(Image1->Picture->Bitmap);

for(Hei=1;Hei Height-1;Hei )
{
up =Hei-1;
down =Hei 1;
if(up<0) up = Bmp->Height-1;
if(down == Bmp->Height) down=0;
tptr = (Byte*)Bmp->ScanLine[Hei];
uptr= (Byte*)Bmp->ScanLine[up];
dptr= (Byte*)Bmp->ScanLine[down];
for(Wid=1;Wid Width-1;Wid )
{
left = Wid-1;
right= Wid 1;
if(left<0) left = Bmp->Width-1;
if(right==Bmp->Width) right=0;
M[1]=(int)uptr[left];
M[2]=(int)uptr[Wid];
M[3]=(int)uptr[right];
M[4]=(int)tptr[left];
M[9]=(int)tptr[Wid];
M[5]=(int)tptr[right];
M[6]=(int)dptr[left];
M[7]=(int)dptr[Wid];
M[8]=(int)dptr[right];

if(M[9]>200)
{
q=0;
for(int i=0; i<9; i )
{
z[q][i] = M[i]/255.0;
}


//init v & w
counter=0;
for(j=0; j for(i=0; i v[j][i]=weighting_v[counter];
counter ;
}
}
counter=0 ;
for(k=0; k for(j=0; j w[k][j]=weighting_w[counter];
counter ;
}
}
//star
for(int q=1 ; q<2 ; q )
{
r[q][m]=1; //r's m 1=1
// zv->u->r
for(j=0 ; j {
u[q][j]=0;
for(i=0 ; i {
u[q][j]= u[q][j] v[j][i]*z[q][i];
}
r[q][j] =(1-exp(-u[q][j]))/(1 exp(-u[q][j])); //bipolar
}
// rw->s->y
for(k=0 ; k

{
s[q][k]=0;
for(j=0 ; j {
s[q][k] = s[q][k] w[k][j]*r[q][j];
}
y[q][k]= s[q][k];
tptr[Wid]=y[q][k]*255.0;
zz=tptr[Wid];
}
}
}
else
{
zz=tptr[Wid];
}
fprintf(fp, "%d ", zz);
}
fprintf(fp, "\n");
}
fclose(fp);
[/code]
有前輩說用
[code delphi]
Form1->Canvas->Pixels[10,10]=clRed;
[/code]
不過我還是試不出來
所以想說po上我原本的程式碼
希望有人能幫看看哪裡該改
我讀image1是破壞過的圖
經過類神經做修補
希望補出來的可以秀在image2上
我現在是將補出來的建在txt檔上
請大家幫個忙
謝謝



------
eva
編輯記錄
crowneva 重新編輯於 2009-10-19 13:54:04, 註解 無‧
crowneva 重新編輯於 2009-10-19 13:56:48, 註解 無‧
crowneva 重新編輯於 2009-10-19 13:58:25, 註解 無‧
taishyang
站務副站長


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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2009-10-19 14:14:18 IP:122.116.xxx.xxx 訂閱
不是已經結案了怎麼還問同樣的問題?
http://delphi.ktop.com.tw/board.php?cid=168&fid=921&tid=99574
crowneva
一般會員


發表:4
回覆:10
積分:2
註冊:2009-07-27

發送簡訊給我
#3 引用回覆 回覆 發表時間:2009-10-19 15:08:07 IP:114.47.xxx.xxx 訂閱
sorry
因為我以為我能順利的自己完成
所以就結案了
------
eva
senso
高階會員


發表:5
回覆:126
積分:226
註冊:2003-11-27

發送簡訊給我
#4 引用回覆 回覆 發表時間:2009-10-21 16:43:11 IP:61.219.xxx.xxx 訂閱
少太多東西程式run不起來
zz=tptr[Wid]; //這行的zz是0~255?

是的話應該就這樣吧
在fprintf(fp, "%d ", zz);下面加一行
Form1->Canvas->Pixels[Wid][Hei] = (TColor)RGB(zz,zz,zz);

crowneva
一般會員


發表:4
回覆:10
積分:2
註冊:2009-07-27

發送簡訊給我
#5 引用回覆 回覆 發表時間:2009-10-25 03:53:55 IP:114.47.xxx.xxx 訂閱
你有興趣要run全部嗎?
我現在圖片有弄出來了~
不過我只出現前1/3= =
下面寫法這樣

[code delphi]
Graphics::TBitmap *Bmp = new Graphics::TBitmap();
Byte *ptr;
Bmp->Assign(Image2->Picture->Bitmap);
for(int i=0;iHeight;i )
{
ptr=(Byte*)Bmp->ScanLine[i];
for(int j=0;jWidth;j )
{
ptr[j]=zz;
}
}

Image2->Picture->Assign(Bmp);

[/code]

------
eva
senso
高階會員


發表:5
回覆:126
積分:226
註冊:2003-11-27

發送簡訊給我
#6 引用回覆 回覆 發表時間:2009-10-26 09:44:00 IP:61.219.xxx.xxx 訂閱
只有1/3...你的圖是Bmp->PixelFormat=pf24bit;t的吧
請寫成這樣
[code cpp]
ptr[j*3]=zz; //B
ptr[j*3 1]=zz; //G
ptr[j*3 2]=zz; //R
[/code]

不過你前面M[1]~M[8]那樣抓是你要的嗎?
好比說我覺得像這樣才對...

[code cpp]
Mb[2]=(int)uptr[Wid*3]; //B
Mg[2]=(int)uptr[Wid*3 1]; //G
Mr[2]=(int)uptr[Wid*3 2]; //R

[/code]
編輯記錄
senso 重新編輯於 2009-10-26 09:45:07, 註解 無‧
crowneva
一般會員


發表:4
回覆:10
積分:2
註冊:2009-07-27

發送簡訊給我
#7 引用回覆 回覆 發表時間:2009-10-26 13:45:35 IP:122.121.xxx.xxx 訂閱
我灰階的用小畫家破壞之後就變成24bite了ˊˋ
那為什麼我印出來的txt檔是全部都有補的
且是0~255的值?

------
eva
編輯記錄
crowneva 重新編輯於 2009-10-26 14:27:21, 註解 無‧
senso
高階會員


發表:5
回覆:126
積分:226
註冊:2003-11-27

發送簡訊給我
#8 引用回覆 回覆 發表時間:2009-10-26 15:12:38 IP:61.219.xxx.xxx 訂閱
pf8bit並不是灰階,是256色...
小畫家也是可以存256色點陣圖(pf8bit)

pf24bit在scanline因為是3byte所以長度是width*3
但是你原本的程式是對pf8bit的,讀pf24bit當然只有1/3....

在一開始載入的時候設定就可以了
[code cpp]
Bmp->Assign(Image1->Picture->Bitmap);
Bmp->PixelFormat=pf8bit;

[/code]

也畫出來是一樣要看PixelFormat
[code cpp]
Byte *ptr;
Graphics::TBitmap *Bmp = new Graphics::TBitmap();
Bmp->Assign(Image1->Picture->Bitmap);

//Bmp->PixelFormat=pf8bit;
for(int i=0;iHeight;i )
{
ptr=(Byte*)Bmp->ScanLine[i];
for(int j=0;jWidth;j )
{
if (Bmp->PixelFormat==pf8bit)
{
ptr[j]=ptr[j]; //如果本來就是灰階
}
else if (Bmp->PixelFormat==pf24bit)
{
int b=ptr[j*3];
int g=ptr[j*3 1];
int r=ptr[j*3 2];
int grey=0.299*r 0.587*g 0.114*b; //計算灰階後的值

ptr[j*3] =grey; //B
ptr[j*3 1]=grey; //G
ptr[j*3 2]=grey; //R
//或Bmp->Canvas->Pixels[j][i]=(TColor)RGB(grey,grey,grey);
}
}
}
Image2->Picture->Assign(Bmp);

[/code]

crowneva
一般會員


發表:4
回覆:10
積分:2
註冊:2009-07-27

發送簡訊給我
#9 引用回覆 回覆 發表時間:2009-10-27 21:50:31 IP:114.47.xxx.xxx 訂閱
我小畫家是存點陣圖呀~
可是是24bit

我照你說的意思改完之後
補的地方(白色的)補成彩色的耶...

不好意思一直問你問題
請見諒ˊˋ
------
eva
編輯記錄
crowneva 重新編輯於 2009-10-28 04:32:36, 註解 無‧
senso
高階會員


發表:5
回覆:126
積分:226
註冊:2003-11-27

發送簡訊給我
#10 引用回覆 回覆 發表時間:2009-10-28 09:43:49 IP:61.219.xxx.xxx 訂閱
阿~不好意思熊熊忘記
256色(pf8bit)的0~255是有對應一個調色盤有對應各自的顏色
所以補應該會變成別的顏色,不是0~255灰階

請先改成pf24bit在scanline吧
補完圖再改成pf8bit存檔(如果有必要的話)

小畫家另存新檔不是可以選存檔類型嗎
單色點陣圖(pf1bit)
16色點陣圖(pf4bit)
256色點陣圖(pf8bit)
24位元點陣圖(pf24bit)

編輯記錄
senso 重新編輯於 2009-10-28 09:51:08, 註解 無‧
crowneva
一般會員


發表:4
回覆:10
積分:2
註冊:2009-07-27

發送簡訊給我
#11 引用回覆 回覆 發表時間:2009-10-30 03:32:28 IP:118.171.xxx.xxx 訂閱
我想我知道我的問題在哪了
另外想再問個問題
我第一次run時正常
再run第二次時
補的地方好像就會再加上第一次
第三次時就在加地第二次的
所以一直加下去的結果
理所當然就出現了彩色
請問是記憶體要free掉之類的嗎?
是要怎嚜處理呢?
------
eva
編輯記錄
crowneva 重新編輯於 2009-10-30 04:33:41, 註解 無‧
senso
高階會員


發表:5
回覆:126
積分:226
註冊:2003-11-27

發送簡訊給我
#12 引用回覆 回覆 發表時間:2009-10-30 16:07:43 IP:61.219.xxx.xxx 訂閱
可能是有某個地方把直接把0~255值直接給到了pf8bit的bitmap了

要不要試試直接幫pf8bit的bitmap建一個灰階調色盤?
請參考http://delphi.ktop.com.tw/board.php?cid=168&fid=921&tid=37679
這樣存進去就不會是灰階的了
crowneva
一般會員


發表:4
回覆:10
積分:2
註冊:2009-07-27

發送簡訊給我
#13 引用回覆 回覆 發表時間:2009-11-10 01:29:12 IP:118.171.xxx.xxx 訂閱
麻煩你了~
thank Q
------
eva
系統時間:2024-04-25 17:14:22
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!