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

多張影像讀取

答題得分者是:senso
piliboy
一般會員


發表:4
回覆:8
積分:2
註冊:2008-08-29

發送簡訊給我
#1 引用回覆 回覆 發表時間:2010-08-04 15:07:44 IP:140.116.xxx.xxx 訂閱
我要讀取多張影像,希望利用ScanLine方式加快讀取速度,
但是在Image2顯示出來的影像會有黑色線條空格,
找了很多網路資料不知要怎麼解決 希望可以給我一些方法解決。
另外希望加快多張影像(JPG)讀取速度,希望也可以給一些方法
謝謝~~
[code cpp]
Graphics::TBitmap *bmp = new Graphics::TBitmap();
int h=Edit1->Text.ToInt();
int w=Edit2->Text.ToInt();
Image1->Picture->Bitmap->PixelFormat = pf8bit;
Image1->Picture->Bitmap->Width=w;
Image1->Picture->Bitmap->Height=h;
Image2->Picture->Bitmap->Width=w;
Image2->Picture->Bitmap->Height=h;
Image2->Left=Image1->Left Image1->Width 10;
Button1->Left=Image2->Left 500;
Button2->Left=Button1->Left Button1->Width 20;
bmp->Width = w;
bmp->Height = h;
unsigned char *ptr1=new unsigned char [w*3];
int index=0;
if(OpenPictureDialog1->Execute())
{
int n=OpenPictureDialog1->Files->Count;//計算輸入幾張影像
image=new unsigned char**[n];

int color;
for(int k=0;k {
image[k]=new unsigned char*[h];
}
for(int k=0;k {
for(int i=0;i {
image[k][i]=new unsigned char[w];
}
}
int a;
AnsiString szFilename;
for(int k=0;k {
a = k;
szFilename = "a" AnsiString(a) ".jpg";
Image1->Picture->LoadFromFile(szFilename);
bmp->Canvas->Draw(0, 0, Image1->Picture->Graphic);
Image1->Picture->Assign(bmp);
for(int i=0;iHeight;i )
{
ptr1 = (Byte *)Image1->Picture->Bitmap->ScanLine[i];
index=0;
for(int j=0;jWidth;j=j 1)
{
image[k][i][j]=(Byte)ptr1[index];
index =3;
}
}
}
}

delete bmp;
for(int i=0;i{
for(int j=0;j {
Image2->Canvas->Pixels[j][i]=(TColor)RGB(image[0][i][j],image[0][i][j],image[0][i][j]);
}
}

[/code]

------
有自信的人 不一定成功
但沒有自信的人 一定失敗
piliboy
一般會員


發表:4
回覆:8
積分:2
註冊:2008-08-29

發送簡訊給我
#2 引用回覆 回覆 發表時間:2010-08-05 10:08:44 IP:140.116.xxx.xxx 訂閱
我有試過Image1->Picture->Bitmap->PixelFormat = pf8bit;還有 pf24bit
成果出來都不對
------
有自信的人 不一定成功
但沒有自信的人 一定失敗
piliboy
一般會員


發表:4
回覆:8
積分:2
註冊:2008-08-29

發送簡訊給我
#3 引用回覆 回覆 發表時間:2010-08-05 10:18:20 IP:140.116.xxx.xxx 訂閱
原來改成這樣  bmp->PixelFormat=pf24bit就可以了XD

不過希望請問各位有更快讀取多張JPG檔的方式嗎
------
有自信的人 不一定成功
但沒有自信的人 一定失敗
senso
高階會員


發表:5
回覆:126
積分:226
註冊:2003-11-27

發送簡訊給我
#4 引用回覆 回覆 發表時間:2010-08-05 11:50:24 IP:61.219.xxx.xxx 訂閱
1.改用TJPEGImage讀取jpg檔
2.改用bmp->Assign(jpeg)取代draw
piliboy
一般會員


發表:4
回覆:8
積分:2
註冊:2008-08-29

發送簡訊給我
#5 引用回覆 回覆 發表時間:2010-08-05 12:01:33 IP:140.116.xxx.xxx 訂閱
我有使用TJPEGImage讀取jpg檔
但是我需要將每張影像存入矩陣裡面再做運算
不知道bmp->Assign(jpeg)要怎麼改才可以快速的將每張影像存入矩陣裡面

===================引 用 senso 文 章===================
1.改用TJPEGImage讀取jpg檔
2.改用bmp->Assign(jpeg)取代draw
------
有自信的人 不一定成功
但沒有自信的人 一定失敗
senso
高階會員


發表:5
回覆:126
積分:226
註冊:2003-11-27

發送簡訊給我
#6 引用回覆 回覆 發表時間:2010-08-05 17:41:15 IP:61.219.xxx.xxx 訂閱
ScanLine已經很快了吧?
還是你覺得new那些陣列跟給值太麻煩..

不曉得CopyMemory有沒有比較快...
image[k][i]=new unsigned char[w*3];
ptr1 = (Byte *)Image1->Picture->Bitmap->ScanLine[i];
CopyMemory(image[k][i],ptr1,sizeof(Byte)*w*3);

另外..
unsigned char *ptr1; //這指標指向ScanLine的位址,不用new
系統時間:2017-10-23 5:01:48
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!