3364
一般會員
發表:8 回覆:5 積分:2 註冊:2003-09-26
發送簡訊給我
|
看到站上發表的影像處理1,2 ,3 ,想到此一idea
例如:
在form上放二個Timage, 左邊是彩色的24bit(any..), 右邊是經scanline
r g b 處理過的灰階圖,用現成的function存檔後還是bitmap(灰階). 我是想存成二進位(或是文字檔),內容是相對座標(由點組成)。 好處是檔案大小相對小很多,且秀圖會很快。 對了,存了之後還要能秀出。
|
taishyang
站務副站長
發表:377 回覆:5490 積分:4563 註冊:2002-10-08
發送簡訊給我
|
3364您好:
不好意思,您指的是RAW Date方式儲存嗎?
若是的話,站上已經有相關範例可以參考囉< > 順心< >
|
3364
一般會員
發表:8 回覆:5 積分:2 註冊:2003-09-26
發送簡訊給我
|
我找找看。
感謝!
|
taishyang
站務副站長
發表:377 回覆:5490 積分:4563 註冊:2002-10-08
發送簡訊給我
|
3364您好:
下面是範例程式
//存
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Graphics::TBitmap* BMP = new Graphics::TBitmap();
BMP->LoadFromFile("1.bmp");
Image1->Picture->Assign(BMP);
TStringList* RawData=new TStringList();
Byte* ptr=NULL;
for (int y=0;yHeight ;y )
{
ptr=(Byte*)BMP->ScanLine[y];
for (int x=0;xWidth ;x )
{
RawData->Add(ptr[x*3]);
}
}
RawData->SaveToFile(IntToStr(BMP->Width) "x" IntToStr(BMP->Height) ".txt");
delete BMP;
delete RawData;
}
//---------------------------------------------------------------------------
//取
void __fastcall TForm1::Button2Click(TObject *Sender)
{
Graphics::TBitmap* BMP = new Graphics::TBitmap();
BMP->PixelFormat=pf24bit;
BMP->Height=120;
BMP->Width=160;
TStringList* RawData=new TStringList();
RawData->LoadFromFile("160x120.txt");
Byte* ptr=NULL;
int i=0;
for (int y=0;yHeight ;y )
{
ptr=(Byte*)BMP->ScanLine[y];
for (int x=0;xWidth ;x )
{
ptr[x*3]=RawData->Strings[i].ToInt();
ptr[x*3 1]=RawData->Strings[i].ToInt();
ptr[x*3 2]=RawData->Strings[i].ToInt();
i ;
}
}
Image2->Picture->Assign(BMP);
delete BMP;
delete RawData;
}
//--------------------------------------------------------------------------- 順心 <>~我也是在學習的階段,回答的不好請您多多見諒與指教~>
|
taishyang
站務副站長
發表:377 回覆:5490 積分:4563 註冊:2002-10-08
發送簡訊給我
|
第二種方式
//存
void __fastcall TForm1::Button3Click(TObject *Sender)
{
Graphics::TBitmap* BMP = new Graphics::TBitmap();
BMP->LoadFromFile("1.bmp");
Image1->Picture->Assign(BMP);
int size=BMP->Height*BMP->Width;
Byte *RawData = new Byte[size];
Byte* ptr=NULL;
int i=0;
for (int y=0;yHeight ;y )
{
ptr=(Byte*)BMP->ScanLine[y];
for (int x=0;xWidth ;x )
{
RawData[i]=ptr[x*3];
i ;
}
}
TMemoryStream* ms= new TMemoryStream();
ms->Position=0;
ms->Write(RawData,size);
ms->SaveToFile("Data.dat");
delete ms;
delete BMP;
delete [] RawData;
}
//---------------------------------------------------------------------------
//取
void __fastcall TForm1::Button4Click(TObject *Sender)
{
TMemoryStream* ms= new TMemoryStream();
ms->LoadFromFile("Data.dat");
Graphics::TBitmap* BMP = new Graphics::TBitmap();
BMP->PixelFormat=pf24bit;
BMP->Height=120;
BMP->Width=160;
int size=BMP->Height*BMP->Width;
Byte* RawData = new Byte[size];
Byte* ptr=NULL;
ms->Read(RawData,size);
int i=0;
for (int y=0;yHeight ;y )
{
ptr=(Byte*)BMP->ScanLine[y];
for (int x=0;xWidth ;x )
{
ptr[x*3] = RawData[i];
ptr[x*3 1] = RawData[i];
ptr[x*3 2] = RawData[i];
i ;
}
}
Image2->Picture->Assign(BMP);
delete ms;
delete BMP;
delete [] RawData;
}
//---------------------------------------------------------------------------
順心 <>~我也是在學習的階段,回答的不好請您多多見諒與指教~>
|
3364
一般會員
發表:8 回覆:5 積分:2 註冊:2003-09-26
發送簡訊給我
|
|