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

請問:pgm 與 圖形pixel 的問題

尚未結案
cowbjt
一般會員


發表:11
回覆:30
積分:8
註冊:2004-07-16

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-04-23 17:37:45 IP:140.124.xxx.xxx 未訂閱
抱歉,問題有點複雜 問題大概可以分成二個    第一個: 要改pgm圖形的pixel 可以直接修改嗎? 我利用以下程式畫一條將近白色線
 
for (int i = 10; i <= 200; i  )
    Image1->Canvas->Pixels[i][10] = 250;
但呈現出來的卻是一條滿黑的線 所以請問一下,pgm 是種灰階的圖形格式 但他的rage 是否不在0~255內 ps.後來我將用Pixels[i][10]存在一個陣列 然後,原封不動的再寫回去,呈現的結果是原圖,但變暗了許多??? 怎麼會這樣?? 第二個: 考慮到上述目題,故利用Image圖形讀進來之後 使用 Image1->Picture->SaveToFile("c:\\a.bmp"); 另存為bmp檔,再讀進來,且格式為 Image1->Picture->Bitmap->PixelFormat=pf8bit; 同樣利用上面的畫線程式,但還是一樣的不是一條白線 後來試圖利用下程式畫線
 
BYTE *ptr = (Byte*)Image1->Picture->Bitmap->ScanLine[50];
for (int i = 0; i <= 100; i  )
{
    ptr[i] = 250;
}
但卻沒有直線的出現?? 而最後,利用ScanLine畫白線的方法可以成功 但,其成功的條件是,在畫完之後必須有類似 Image1->Canvas->Pixels[0][0] = 200; 的指令去使ScanLine的成果出現 這樣說不知道前輩懂不懂 發表人 - cowbjt 於 2005/04/24 00:05:51
justdo
高階會員


發表:2
回覆:359
積分:222
註冊:2004-08-17

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-04-25 19:40:52 IP:221.169.xxx.xxx 未訂閱
看不出問題,可以把完整的code跟圖片放上來嗎?
cowbjt
一般會員


發表:11
回覆:30
積分:8
註冊:2004-07-16

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-04-26 17:52:34 IP:140.124.xxx.xxx 未訂閱
您好: 這樣講好了 我在Iamge1 裡放了一張pgm 的圖片    然後利用下面code 畫了二條線  
 
for (int i = 10; i <= 200; i  )
    Image1->Canvas->Pixels[i][10] = 250;    BYTE *ptr = (Byte*)Image1->Picture->Bitmap->ScanLine[50];
for (int i = 0; i <= 100; i  )
{
    ptr[i] = 250;
}
結果 這二條線應該是一樣的顏色吧 可是...居然那麼多 而且,一定要有 Image1->Canvas->Pixels[][] = ; 去設定到(設定那一點,或多少值都無所謂),不然用ptr 畫的線會看不到 不知道這樣有沒有比較清楚一點
JerryKuo
版主


發表:42
回覆:571
積分:322
註冊:2003-03-10

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-04-26 18:34:44 IP:220.135.xxx.xxx 未訂閱
引言: 您好: 這樣講好了 我在Iamge1 裡放了一張pgm 的圖片 然後利用下面code 畫了二條線
 
for (int i = 10; i <= 200; i  )
    Image1->Canvas->Pixels[i][10] = 250;    BYTE *ptr = (Byte*)Image1->Picture->Bitmap->ScanLine[50];
for (int i = 0; i <= 100; i  )
{
    ptr[i] = 250;
}
結果 這二條線應該是一樣的顏色吧 可是...居然那麼多 而且,一定要有 Image1->Canvas->Pixels[][] = ; 去設定到(設定那一點,或多少值都無所謂),不然用ptr 畫的線會看不到 不知道這樣有沒有比較清楚一點
cowbjt你好:
假設影像的pixel format是24bits    這樣是畫一點,每點3 bytes,總共畫了191點
Image1->Canvas->Pixels[i][10] = 250;    這樣只畫了1/3點, 每次1個byte, 畫了三次才等於上面的一點, 所以100/3,只畫
了34點
ptr[i] = 250;    依照不同的pixel format,這兩種方式畫出來的結果都會不同。    如果你希望上下一樣,則在用scanline的時候,記得一次畫三點
因為
Image1->Canvas->Pixels[i][10] = (TColor)RGB(ptr[i],ptr[i 1], ptr[i 2])
i =3;
justdo
高階會員


發表:2
回覆:359
積分:222
註冊:2004-08-17

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-04-26 20:11:55 IP:221.169.xxx.xxx 未訂閱
樓上的JerryKuo大大: Image1->Canvas->Pixels[i][10] = 250; 的確是以單一個點填入資料的,並非你所謂的1/3個點 使用ScanLine才會有這樣的情況出現 問題在於Image1->Canvas->Pixels[x][y]輸入資料的型態為TColor 當指定250這個值給TColor型態,我們並不知道他會怎麼解釋... 正確的指定方式應該為 Image1->Canvas->Pixels[i][10]=RGB(250,250,250); 但對於我的程式來說,Image1->Canvas->Pixels[i][10] = 250;畫出的是紅線 怎麼跟cowbjt不一樣? 另外,我測試的結果,Pixels跟ScanLine併用並不會產生你所說的情況 我猜可能是 for (int i = 10; i <= 200; i ) Image1->Canvas->Pixels[i][10] = 250; 這個迴圈的i值超過影像的寬度,造成記憶體錯亂 我查看了一下測試影像,其寬度也不過100而已, 結果上述迴圈卻用到200,明顯有問題
cowbjt
一般會員


發表:11
回覆:30
積分:8
註冊:2004-07-16

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-04-26 20:31:21 IP:140.124.xxx.xxx 未訂閱
嗯嗯,ok了 就跟說justdo兄的一樣,要用 Image1->Canvas->Pixels[i][10]=RGB(250,250,250); 只是我因為圖形是灰階的 所以我一開始就設定 Image1->Picture->Bitmap->PixelFormat=pf8bit; 所以才會想直接給一個0~255 的值(灰階的不就一個值而已嗎??) 還有就是不知道為什麼只用ScanLine畫的都不會出現 一定要有去動到Pixels[][]圖片才會更新.....
JerryKuo
版主


發表:42
回覆:571
積分:322
註冊:2003-03-10

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-04-27 09:16:55 IP:220.135.xxx.xxx 未訂閱
引言: 樓上的JerryKuo大大: Image1->Canvas->Pixels[i][10] = 250; 的確是以單一個點填入資料的,並非你所謂的1/3個點 使用ScanLine才會有這樣的情況出現 啊>"<,被抓包 可能閱讀方法不同吧!! 這樣是畫一點,每點3 bytes,總共畫了191點 Image1->Canvas->Pixels[i][10] = 250; 這樣讀,應該就跟你說的一樣吧 問題在於Image1->Canvas->Pixels[x][y]輸入資料的型態為TColor 當指定250這個值給TColor型態,我們並不知道他會怎麼解釋... 正確的指定方式應該為 Image1->Canvas->Pixels[i][10]=RGB(250,250,250); 但對於我的程式來說,Image1->Canvas->Pixels[i][10] = 250;畫出的是紅線 怎麼跟cowbjt不一樣? 另外,我測試的結果,Pixels跟ScanLine併用並不會產生你所說的情況 我猜可能是 for (int i = 10; i <= 200; i ) Image1->Canvas->Pixels[i][10] = 250; 這個迴圈的i值超過影像的寬度,造成記憶體錯亂 我查看了一下測試影像,其寬度也不過100而已, 結果上述迴圈卻用到200,明顯有問題
系統時間:2024-05-13 9:35:07
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!