2010年1月15日 星期五
HW8
老師剛開始交我們的是開啟圖片檔案,再慢慢的由能開圖片檔案,進而做一些對圖片的操作,讓我們慢慢的熟析BCB。並且加深的去探討圖片格式的差異,再去讀圖片裡面的標頭檔案,以及教我們使用fopen、fseek..等的函數指令。教會我們使用那些函數,使我們可以自由的從圖片格式,隨意抽取自己想要的資料,這些指令也可以隨意抽取音樂格式裡的資料,真的很方便。
在學習BCB的過程中,也利用BCB來寫別的程式課的作業,BCB真是惠我良多阿!利用了BCB方便的UI介面,不像C++要設定一堆東西,寫起來更是方便,並且有許多的元件可以使用,只需要元件放下來,給他->就可以找到一些自己想要用的函數。
老師在這堂課的教學,是讓我們師生互動,互相的交流知識,並解決一些同學的疑難雜症,很少老師會以互動為主要訴求,希望老師能持續保持。
HW6
HW5

開啟PSPAD檢視 金龜子.GIF
0: 47 49 46
38 39 61 GIF89a Header
Logical Screen Descriptor
6: 03 00 3 - canvas width in pixels
8: 05 00 5 - canvas height in pixels
A: F7 - GCT follows (256 colors at 3 x 8 bits/primary)
B: 00 0 - background color #0
C: 00 - default pixel aspect ratio
R G B Global Color Table
D: 00 00 00 0 0 0 - color #0 black
10: 80 00 00 128 0 0 - color #1 dark red ("maroon")
: :
85: 00 00 00 0 0 0 - color #40 black
fseek(GIF_file, 13, SEEK_SET);
開始讀取顏色 繪製到陣列
for(int x=0;x<16;x++){ y="0;y<16;y++){">Canvas->Pixels[x+move_x][y+move_y]= RGB(bitSize[0],bitSize[1],bitSize[2]);
}
}
sort 由暗到明
color1 = RGB(GIF_R[i]*0.299,GIF_G[i]*0.587,GIF_B[i]*0.114);
color2 = RGB(GIF_R[i+1]*0.299,GIF_G[i+1]*0.587,GIF_B[i+1]*0.114);
將這兩個顏色比對,用泡沫排序法慢慢排列再次繪出,就結束了!
2009年12月10日 星期四
HW4
這次作業和第三次作業有些雷同,只是這次是要重新再畫出一張圖,這次跟上次不同的地方是將fopen的模式改成rb 而不是單純的r
STEP1
FILE* BMP_file = fopen(OpenPictureDialog1->FileName.c_str(), "rb");
STEP2
在取得決定 要畫的畫布大小
int start,BMP_Width,BMP_Height;
Image3->Height=Image1->Picture->Height;
Image3->Width=Image1->Picture->Width;
STEP3
將圖檔以二進制讀入抓取裡面得每個點的RGB值,將值取出來在畫到另外的Image去。
for(int x=BMP_Height;x>=0;x--){
for(int y=0;y
Image3->Canvas->Pixels[y][x]=RGB(bitSize[2],bitSize[1],bitSize[0]);
Application->ProcessMessages();
}
我的圖大小好像怪怪的...在學校可以用
Image3->Height=Image1->Picture->Height;
Image3->Width=Image1->Picture->Width;
不過回到家裡就不知道為什麼沒辦法用 真奇怪 囧
2009年11月5日 星期四
HW3
這次作業用新的東西fopen & fread & fseek
bmp檔 這次作業用到的表頭
起始位元組 所占位元組數 具體內容 標識
1 2 檔案類型(windows點陣圖為“BM”)bfType
3 4 文件大小 bfSize
19 4 點陣圖的寬度 biWidth
23 4 點陣圖的高度 biHeight
39 4 點陣圖水準分辯率(像素/米) biXPelsPerMeter
43 4 點陣圖垂直分辯率(像素/米) biYPelsPerMeter
擷取檔案格式
imBMP = fopen(OpenPictureDialog1->FileName.c_str(), "r")
擷取檔案大小
fread(bSize, 1, 4, imBMP)
擷取檔案寬度
fseek(imBMP,18,SEEK_SET)
擷取檔案長度
fseek(imBMP,22,SEEK_SET)
擷取水平解析度
fseek(imBMP,38,SEEK_SET)
擷取垂直解析度
fseek(imBMP,42,SEEK_SET)
使用fseek可以直接抓取Bitmap File Header裡面你想要項目,不用像fread要抓取前面的空間不用的空間,但是抓取出的值會是 (像素/公尺)所以要除上39.37才會變成英吋!
2009年10月22日 星期四
HW2
關於這次的灰階花了一段時間研究,終於弄出來了。
先去設定第二張image印出來要跟第一張的image 寬高要一樣
高
Image2Height=Image1->Picture->Height;
寬
Image2Width=Image1->Picture->Width;
灰階的色彩值等於
(GetRValue(Image1->Canvas->Pixels[j][i])+GetGValue(Image1->Canvas->Pixels[j][i])+GetBValue(Image1->Canvas->Pixels[j][i]))/3;
不過panel 還是會顯示顏色 不是應該都是灰灰的顏色嗎?
怎麼還是彩色的?真奇怪
我的ProgressBar不知道該怎麼樣去設定他才會剛剛好跑到底,
請教老師要怎麼設定ProgressBar會比較好?
ProgressBar1->Position=0;
ProgressBar1->Max=Image2Height;
是要給他甚麼判斷式嗎?
2009年10月7日 星期三
HW1
PANEL的程式碼:PAL->
Color=RGB(GetRValue(Image1->Canvas->Pixels[X][Y]),GetGValue(Image1->Canvas->Pixels[X][Y]),GetBValue(Image1->Canvas->Pixels[X][Y]));
讓滑鼠點左鍵可以製造點點
if(Button==mbLeft)
Image1->Canvas->Pixels[X][Y]=clRed;
讓滑鼠點右鍵可以將兩點的線連起來
if(Button==mbRight) Image1->Canvas->LineTo(X,Y);
可以替換線的顏色
Image1->Canvas->Pen->Color=ColorDialog1->Color;
之後自己稍微的嘗試了一下儲存圖片,儲存下來的圖片都會沒有副檔名,都必須要在儲存的時候加上你所想要的副檔名,這是為什麼??希望能向老師請教一下。