顯示具有 96360413 陳嘉麟 標籤的文章。 顯示所有文章
顯示具有 96360413 陳嘉麟 標籤的文章。 顯示所有文章

2010年1月15日 星期五

HW8

一眨眼的時間,這學期就結束了,回首自己學了些什麼,剛開始接觸BCB想這BCB好多元件可以用,裡面有內建一些可以用來寫網路程式的東西,感覺BCB真的很強大,開檔短短的一行指令,就可以將檔案開啟,若是以其他語言來撰寫就沒那麼簡單了。
老師剛開始交我們的是開啟圖片檔案,再慢慢的由能開圖片檔案,進而做一些對圖片的操作,讓我們慢慢的熟析BCB。並且加深的去探討圖片格式的差異,再去讀圖片裡面的標頭檔案,以及教我們使用fopen、fseek..等的函數指令。教會我們使用那些函數,使我們可以自由的從圖片格式,隨意抽取自己想要的資料,這些指令也可以隨意抽取音樂格式裡的資料,真的很方便。
在學習BCB的過程中,也利用BCB來寫別的程式課的作業,BCB真是惠我良多阿!利用了BCB方便的UI介面,不像C++要設定一堆東西,寫起來更是方便,並且有許多的元件可以使用,只需要元件放下來,給他->就可以找到一些自己想要用的函數。
老師在這堂課的教學,是讓我們師生互動,互相的交流知識,並解決一些同學的疑難雜症,很少老師會以互動為主要訴求,希望老師能持續保持。

HW6

終於從圖片慢慢到了音樂
從最初的BMP-->GIF-->WAV

這次作業和第三次的讀取BMP圖檔內容很相似


OpenDialog1->Excute(); //一樣是開啟檔案
MediaPlayer1->FileName=OpenDialog1->FileName; //開啟檔案用的DIALOGUE 為 MediaPlayer

MediaPlayer1->Open();
MediaPlayer1->Play();

WAV圖檔格式如下:

一樣是用強大的FSEEK指令去抓出你想要的東西
就慢慢抓取你想要的就好了
中間過程跟第三次很像 就不詳細說明

底下是執行結果



HW5

依照慣例開啟圖片,這次圖片為金龜子.GIF

開啟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 fread(bitSize, 1, 3, BMP_file);
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

BCB程式真是個方便的工具,開圖讀圖只要短短幾行。

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;

之後自己稍微的嘗試了一下儲存圖片,儲存下來的圖片都會沒有副檔名,都必須要在儲存的時候加上你所想要的副檔名,這是為什麼??希望能向老師請教一下。