全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1336
推到 Plurk!
推到 Facebook!

如何判別一張圖是8bit灰階圖還是GRB彩色圖

尚未結案
bio
一般會員


發表:42
回覆:36
積分:20
註冊:2003-03-05

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-07-15 11:11:02 IP:210.68.xxx.xxx 未訂閱
請問各為 要如何在程式裡的前處裡就判別我load進來的是8bit圖還是彩色圖     bmp1= new Graphics::TBitmap();     Image1->Picture->LoadFromFile(OpenPictureDialog1->FileName);     bmp1->PixelFormat = pf24bit;     bmp1->Assign(Image1->Picture);     Image1->Picture->Assign(bmp1); --------------------------------------------     bmp2 = new Graphics::TBitmap();     bmp2->Assign(bmp1); --------------------------------------------    for(i=0; iHeight; i ) { ptr = (Byte*)bmp2->ScanLine[i]; for(j=0; jWidth; j ) { if((ptr[j])== (ptr[j 1])== (ptr[j 2])) {gray_flag=1; break;} else {gray_flag=0; break;} } } ------------------------------------------------------ 我這樣寫應該是有錯吧 可以跟我說要怎麼片別圖檔種類嗎 謝謝
yangcare
一般會員


發表:7
回覆:6
積分:2
註冊:2004-04-22

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-07-15 12:58:43 IP:219.133.xxx.xxx 未訂閱
一種笨方法﹕將bitmap頭文件中的信息取出來﹐就知道是8位還是24位了。    
    #include 
    #include         int fd;
    fd=open("pic.bmp",O_RDONLY|O_BINARY);
    BYTE buffer[30];
    read(fd,buffer,30);
    Edit1->Text =  IntToStr(buffer[28]); //這個值就能告訴你是多少位了。
    close(fd);  
ccd0614
一般會員


發表:4
回覆:10
積分:2
註冊:2004-05-09

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-07-16 00:11:39 IP:61.230.xxx.xxx 未訂閱
開啟檔案後 依序讀取出bitmapfileheader 與bitmapinfoheader 這兩個BMP檔頭 在BITMAPINFOHEADER 結構裡有一個biBitCount的參數 若值為8則為灰階 若為24則為全彩 可參考MSDN http://msdn.microsoft.com/library/default.asp?url=/library/en-us/gdi/bitmaps_1rw2.asp
bio
一般會員


發表:42
回覆:36
積分:20
註冊:2003-03-05

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-07-19 13:35:41 IP:210.68.xxx.xxx 未訂閱
ccd0614您好 能否說明一下從我程式中如何接你所說的那兩個步驟 bmp1= new Graphics::TBitmap(); Image1->Picture->LoadFromFile(OpenPictureDialog1->FileName); bmp1->PixelFormat = pf24bit; bmp1->Assign(Image1->Picture); Image1->Picture->Assign(bmp1); 可以幫我加嗎 謝謝
elecvi
一般會員


發表:2
回覆:1
積分:0
註冊:2003-02-19

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-07-21 01:32:33 IP:203.67.xxx.xxx 未訂閱
請您試試看這樣^^ 我試是ok的~ (修改自yangcare大)  
         #include 
    #include         int fd;
    AnsiString FName;
    if(OpenPictureDialog1->Execute()== true)
    {
      FName = OpenPictureDialog1->FileName;
      fd = open(FName.c_str(),O_RDONLY|O_BINARY);
      BYTE buffer[30];
      read(fd,buffer,30);
      Edit1->Text =  IntToStr(buffer[28]); //這個值就能告訴你是多少位了。
      close(fd);
    }
< >< >< >< >< >< > 發表人 -
bio
一般會員


發表:42
回覆:36
積分:20
註冊:2003-03-05

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-07-21 12:23:31 IP:210.68.xxx.xxx 未訂閱
elecvi確切解決我的問題 可是yangcare也幫了很大忙 到底該給誰呢 但ccd0614的也不錯 但只能給一個 給elecvi 希望兩位不會介意吧
系統時間:2024-05-21 1:04:41
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!