特別是調色盤的地方。
說真的本來我不想要用 new一個TImage物件的方式(像老師那樣 TImage *imNEW; ),
所以我都是直接 把原圖直接複製 在灰階修改。
code:
Image2->Picture = Image1->Picture;
---------*
後來怎麼樣run都run不出來,我還以為是因為要像老師new一個TImage物件那樣,
後來發現不是這句的錯,並順便証明我的也可以。
一開始開頭就說 有點跟不上進度,聽到有作業說要做什麼灰階,
我本來信心滿滿,寫完黑白2色 我還在那邊的得意洋洋。
黑白2色
code:
//用 ScanLine的方式 在用if判斷
if(row[a*3]<=128)
{
row[a*3] = 0;
row[a*3+1] = 0;
row[a*3+2] = 0;
}
else
{
row[a*3] = 255;
row[a*3+1] = 255;
row[a*3+2] = 255;
}
---------------*
而灰階4色也是如法砲製,可以說if到底。
灰階4色
後來發現if並非萬能,因為有128種灰階,總不能寫128種if來判斷吧!
我才開始翻開老師 同學們的上個禮拜的程式範本自己研究。
結果一弄....
就從學校弄回家,一回家開BCB,
甚至是把我原本的寫法都刪掉,學老師用new的 把所有的設定都弄好,
竟然還是不行,
那我只能出殺手賤了,接著對照跟同學的程式到底哪裡錯了,
甚至是Ctrl c Ctrl v來測試。差不多5個小時都在弄灰階8色。
我後來還一行行對照,為什麼同學的可以? 我卻殘念...ざんねん ざんねん ざんねん ざんねん
我發現了 我終於發現了...我哭了 ><::::::: ←感動的眼淚
code:
//前面則是像老師 老師new我就new什麼 老師設什麼 我就設什麼
.....
.....
....
for (int i=0; i<256;>
{
PaletteEntry.peRed = gray[i/(256/8)];
PaletteEntry.peGreen = gray[i/(256/8)];
PaletteEntry.peBlue = gray[i/(256/8)];
SetPaletteEntries(GrayPaletteHandle,i,1,&PaletteEntry);
}
newpic->Picture->Bitmap->Palette = GrayPaletteHandle;
for(int i=0; iHeight; i++)
{
row1 = (Byte *)Image1->Picture->Bitmap->ScanLine[i];
row2 = (Byte *)newpic->Picture->Bitmap->ScanLine[i];
for(int a=0;a <>Width ;a++)
{
row2[a] = (Byte)(0.299*row1[a*3+2]+0.587*row1[a*3+1]+0.114*row1[a*3]);
}
------*
耗盡5個小時的 灰階8色
而我錯的地方是這句,我後面的是寫i,而正確的應該是讀a。
row2[a] = (Byte)(0.299*row1[i*3+2]+0.587*row1[i*3+1]+0.114*row1[i*3]);
也因為這句,我知道其實我之前寫的都是對的。
(其實都跟老師差不多,只是我是assign原圖,不是用new,也沒有設定一堆top 長高之類的)
if( 打通任督2脈 == 搞懂灰階8色)
{
cout<<灰階16色;
cout<<灰階32色;
cout<<灰階64色;
cout<<灰階128色;
}
else
{
for(5小時)
debug();
}
return 100分;
"寫程式的功力累積"其實就是 "debug時間的總和",
回覆刪除恭喜你這次作業累積了 5 小時的 debug 時間! 我沒有辦法 return 100 分給你, 你目前只能得到一個 A。