我現在有一張.RAW檔的影像…請問
如何將讀取bmp檔的程式改寫成可讀取.raw檔的程式呢 #include
#pragma hdrstop #include "Unit1.h"
#include "jtable.h"
#include
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
JBLOCK *IBlock, *RBlock; unsigned char **IMatrix, **RMatrix;
int IBlockOpen, IBlockNum;
int IMatrixOpen = 0;
int ImageOpen=0;
int ImageHeight=0, ImageWidth=0;
int RBlockOpen=0, RMatrixOpen=0;
//read
int rb=0, rxb=0, ryb=0, rx=0, ry=0, xb_tlen, yb_tlen;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//--------------------------------------------------------------------------- void __fastcall TForm1::Open1Click(TObject *Sender)
{
int i, j, u, v, xb_num, yb_num;
/* 利用對話視窗開啟一個影像檔 */
if ( OpenPictureDialog1->Execute() ){
Memo1->Clear();
/* 釋放先前開啟影像所用的記憶體 */ if (IMatrixOpen == 1){
for (i=0; iVisible=false;
ImageOpen=1;
Image1->Picture->LoadFromFile(OpenPictureDialog1->FileName);
ImageHeight = Image1->Picture->Height;
ImageWidth = Image1->Picture->Width; /* Change Image Object Size */
Image1->Height = ImageHeight;
Image1->Width = ImageWidth;
Image1->Visible=true; /* Data information */ /* Consider IBlockValue */
yb_num=ImageHeight/8;
xb_num=ImageWidth/8;
if(ImageHeight%8) yb_num ;
if(ImageWidth%8) xb_num ;
IBlockNum = xb_num*yb_num;
xb_tlen = xb_num*8;
yb_tlen = yb_num*8;
} /* Memory allocate */
try{
/* IMatrix */
IMatrix = new unsigned char *[yb_tlen];
for (i=0; iCanvas->Pixels[j][i])) (0.59*GetGValue(Image1->Canvas->Pixels[j][i])) (0.11*GetBValue(Image1->Canvas->Pixels[j][i])); /* about block side */
for(i=ImageHeight; iLines->Add(s);
s = "";
}
*/
/* 將image資料存入IBlock結構中 */
for(u=0; uLines->Add(s);
}
*/
/* //測試用程式區段
for(i=0; i<8; i ){
s="";
for(j=0; j<8; j ){
s = FloatToStrF(IBlock[8].dct_arr[i][j], ffNumber, 5, 2) " ";
}
Memo1->Lines->Add(s);
}
*/
//測試用程式區段
/* s="";
for(i=0; i<8; i ){
for(j=0; j<8; j ){
s = IntToStr(IBlock[6].z_arr[i*8 j]) " ";
}
}
Memo1->Lines->Add(s);
*/
//測試用程式區段(Z)
/* s="";
for(i=0; i<64; i ){
s = IntToStr(IBlock[7].z_arr[i]) " ";
}
Memo1->Lines->Add(s);
*/
}
//---------------------------------------------------------------------------
void __fastcall TForm1::btn_encodeClick(TObject *Sender)
{
int i,j;
dif_DC = 0; /* 開啟檔案以寫入 */
if( (write = fopen("aaa.txt", "wb"))==0 ){
return;
}
fprintf(write," %d %d %d\n", IBlockNum, ImageWidth, ImageHeight);
//s="";
//for(i=0; i<64; i ){
// s =IntToStr(IBlock[0].z_arr[i]) " ";
//}
//Memo1->Lines->Add(s); for(i=0; iLines->Add(s);
} fclose(write);
}
//--------------------------------------------------------------------------- void __fastcall TForm1::btn_decodeClick(TObject *Sender)
{
int i=0, j=0, u=0, v=0, xb_num=0, yb_num=0; /* 釋放先前開啟影像所用的記憶體 */
if (RMatrixOpen == 1){
for (i=0; iWidth=rx; Image2->Height=ry; yb_num=ry/8;
xb_num=rx/8;
if(ry%8) yb_num ;
if(rx%8) xb_num ; /* Memory allocate */
try{
/* RMatrix */
RMatrix = new unsigned char *[yb_num*8];
for (i=0; iLines->Add(s);
s = "";
} // SHOW
for (i=0;iCanvas->Pixels[j][i]=(TColor)RGB(RMatrix[i][j],RMatrix[i][j],RMatrix[i][j]); /*
s="";
Memo1->Lines->Add(s);
for(u=0; u<50; u ){
// Decode(&RBlock[k]);
for(i=0; i<8; i ){
s="";
for(j=0; j<8; j ){
s =IntToStr(RBlock[u].y_arr[i][j]) " ";
}
Memo1->Lines->Add(s);
}
s="";
Memo1->Lines->Add(s); for(i=0; i<8; i ){
s="";
for(j=0; j<8; j ){
s =IntToStr(IBlock[u].y_arr[i][j]) " ";
}
Memo1->Lines->Add(s);
}
s="";
Memo1->Lines->Add(s);
}
*/ //測試用
/*
s="";
Memo1->Lines->Add(s);
for(i=0; i<8; i ){
s="";
for(j=0; j<8; j ){
s =IntToStr(RBlock[8].z_arr[i*8 j]) " ";
}
Memo1->Lines->Add(s);
}
*/
fclose(read);
}
//--------------------------------------------------------------------------- void __fastcall TForm1::FormCreate(TObject *Sender)
{
create_decodeTree();
}
//--------------------------------------------------------------------------- void __fastcall TForm1::btn_testClick(TObject *Sender)
{
int i=0, j=0, u=0, v=0, xb_num=0, yb_num=0; /* 釋放先前開啟影像所用的記憶體 */
if (RMatrixOpen == 1){
for (i=0; iWidth=rx; Image2->Height=ry; yb_num=ry/8;
xb_num=rx/8;
if(ry%8) yb_num ;
if(rx%8) xb_num ; /* Memory allocate */
try{
/* RMatrix */
RMatrix = new unsigned char *[yb_num*8];
for (i=0; iLines->Add(s);
s = "";
} // SHOW
for (i=0;iCanvas->Pixels[j][i]=(TColor)RGB(RMatrix[i][j],RMatrix[i][j],RMatrix[i][j]); /*
s="";
Memo1->Lines->Add(s);
for(u=0; u<50; u ){
// Decode(&RBlock[k]);
for(i=0; i<8; i ){
s="";
for(j=0; j<8; j ){
s =IntToStr(RBlock[u].y_arr[i][j]) " ";
}
Memo1->Lines->Add(s);
}
s="";
Memo1->Lines->Add(s); for(i=0; i<8; i ){
s="";
for(j=0; j<8; j ){
s =IntToStr(IBlock[u].y_arr[i][j]) " ";
}
Memo1->Lines->Add(s);
}
s="";
Memo1->Lines->Add(s);
}
*/ //測試用
/*
s="";
Memo1->Lines->Add(s);
for(i=0; i<8; i ){
s="";
for(j=0; j<8; j ){
s =IntToStr(RBlock[8].z_arr[i*8 j]) " ";
}
Memo1->Lines->Add(s);
}
*/
fclose(read);
} int w,h;
//--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender)
{
Graphics::TBitmap* BMP = new Graphics::TBitmap();
BMP->LoadFromFile("C:\\olgol.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]);
}
}
//--------------------------------------------------------------------------- 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 1]= RawData->Strings[i ].ToInt();
ptr[x 2]= RawData->Strings[i ].ToInt();
}
} Image2->Picture->Assign(BMP);
delete BMP;
delete RawData;
}
//---------------------------------------------------------------------------