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

問一個 BMP 圖檔的問題

答題得分者是:TheMoon
Ansonku
一般會員


發表:13
回覆:15
積分:5
註冊:2002-10-23

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-02-15 15:14:35 IP:61.219.xxx.xxx 未訂閱
我想要將 BMP 的圖檔讀出 存成 raw 檔 之後再把 raw 檔讀出  然後顯示圖案出來 不過好像出了點問題 找不到問題在哪 可能是我還不大了解 scanline 的用法    code 如下
int w,h;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------    void __fastcall TForm1::Button1Click(TObject *Sender)
{            Graphics::TBitmap* BMP = new Graphics::TBitmap();
        BMP->LoadFromFile("C:\\Documents and Settings\\ansonku\\My Documents\\My Pictures\\untitled2.bmp");
        ShowMessage(BMP->PixelFormat);
        Image1->Picture->Assign(BMP);
        TStringList* RawData=new TStringList();
        Byte* ptr=NULL;
        h=BMP->Height;
        w=BMP->Width;
        for(int y=0;yHeight;y++){
           ptr=(Byte*)BMP->ScanLine[y];
           for(int x=0;xWidth*3;x++){
              RawData->Add(ptr[x]);
              //ShowMessage(ptr[x*3]);
           }
        }
        RawData->SaveToFile("RawData.txt");            Form1->Caption=AnsiString(h)+":"+AnsiString(w);
        delete BMP;
        delete RawData;
}
//---------------------------------------------------------------------------    void __fastcall TForm1::Button2Click(TObject *Sender)
{
        Graphics::TBitmap* BMP=new Graphics::TBitmap();
        BMP->PixelFormat=pf24bit;
        BMP->Height=h;
        BMP->Width=w;
        TStringList* RawData=new TStringList();
        RawData->LoadFromFile("RawData.txt");
        Byte* ptr=NULL;
        int i=0;
        for(int y=0;yScanLine[y];
           for(int x=0;xStrings[i++].ToInt();
           ptr[x*3+1]= RawData->Strings[i++].ToInt();
           ptr[x*3+2]= RawData->Strings[i++].ToInt();                   }
        }            Image2->Picture->Assign(BMP);
        delete BMP;
        delete RawData;
}
以下是結果 左邊的是原圖 右邊的是存成raw檔後再讀出所還原的檔案 可是為什麼是灰階的呢? 謝謝~~ 發表人 - ansonku 於 2005/02/15 15:21:45
TheMoon
中階會員


發表:17
回覆:95
積分:67
註冊:2002-06-05

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-02-15 16:36:56 IP:202.39.xxx.xxx 未訂閱
int w,h;
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
        Graphics::TBitmap* BMP=new Graphics::TBitmap();
        BMP->PixelFormat=pf24bit;
        BMP->Height=h;
        BMP->Width=w;
        TStringList* RawData=new TStringList();
        RawData->LoadFromFile("RawData.txt");
        Byte* ptr=NULL;
        int i=0;
        for(int y=0;yScanLine[y];
           for(int x=0; x//問題出在這邊,試試看吧!
                ptr[x]= RawData->Strings[i  ].ToInt();//ptr[x*3]= RawData->Strings[i  ].ToInt();
              ptr[x 1]= RawData->Strings[i  ].ToInt();//ptr[x*3 1]= RawData->Strings[i  ].ToInt();
              ptr[x 2]= RawData->Strings[i  ].ToInt();//ptr[x*3 2]= RawData->Strings[i  ].ToInt();
           }
        }            Image2->Picture->Assign(BMP);
        delete BMP;
        delete RawData;
}
Ansonku
一般會員


發表:13
回覆:15
積分:5
註冊:2002-10-23

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-02-15 16:56:03 IP:61.219.xxx.xxx 未訂閱
引言:
int w,h;
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
        Graphics::TBitmap* BMP=new Graphics::TBitmap();
        BMP->PixelFormat=pf24bit;
        BMP->Height=h;
        BMP->Width=w;
        TStringList* RawData=new TStringList();
        RawData->LoadFromFile("RawData.txt");
        Byte* ptr=NULL;
        int i=0;
        for(int y=0;yScanLine[y];
           for(int x=0; x//問題出在這邊,試試看吧!
                ptr[x]= RawData->Strings[i++].ToInt();//ptr[x*3]= RawData->Strings[i++].ToInt();
              ptr[x+1]= RawData->Strings[i++].ToInt();//ptr[x*3+1]= RawData->Strings[i++].ToInt();
              ptr[x+2]= RawData->Strings[i++].ToInt();//ptr[x*3+2]= RawData->Strings[i++].ToInt();
           }
        }            Image2->Picture->Assign(BMP);
        delete BMP;
        delete RawData;
}
改過之後會變成這樣 右邊的圖好像變成三份了 而且好像還是沒辦法還原成原來的樣子
TheMoon
中階會員


發表:17
回覆:95
積分:67
註冊:2002-06-05

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-02-15 17:28:37 IP:202.39.xxx.xxx 未訂閱
請問您原圖的PixelFormat為何? 我使用的測試影像run出來的結果沒問題。 測試影像(pf24bit)如下所示:
Ansonku
一般會員


發表:13
回覆:15
積分:5
註冊:2002-10-23

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-02-15 18:12:28 IP:61.219.xxx.xxx 未訂閱
引言: 請問您原圖的PixelFormat為何? 我使用的測試影像run出來的結果沒問題。 測試影像(pf24bit)如下所示:
sorry~~ 我的原圖不是 24 bit 的 換了一張後就可以了 謝謝你~~ 這樣就可以繼續下一步了
richtop
資深會員


發表:122
回覆:646
積分:468
註冊:2003-06-10

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-02-15 18:27:27 IP:211.76.xxx.xxx 未訂閱
Ansonku 您好:    插個花! TheMoon 大大已經點出問題點了,建議您在讀入影像之後立即更改PixelFormat,這樣就不會產生格式錯置的問題。    
BMP->LoadFromFile("C:\\Documents and Settings\\ansonku\\My Documents\\My Pictures\\untitled2.bmp");
BMP->PixelFormat = pf24bit;
 
RichTop 敬上 =====***** 把數學當工具,可以解決問題;將數學變能力,能夠發現並解決問題! =====#####
系統時間:2024-05-17 9:57:55
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!