BCB:影像多次處理後會跑掉
遭遇問題
影像多次處理後會跑掉,是今天re-code專題程式發現的詭異情況,只知道,詳細原因不明,因為這個問題害我損失很多時間。
實驗開始
開啟一個圖檔,三個Image物件分別Load同一個檔案,之後每按一次實驗按鈕,就重新指定Image的所有像素值,詳見實驗碼。
按下第二次的結果,中間直接設定Bitmap給Image的開始扭曲第三次的結果更是糟糕
第十次的結果就不用說了,整個就是不能看了
實驗程式碼
結論就是我還沒有結論(倒)
目前只能避開這個因素,要作影像的處理就要用畫的,或是直接在Imag物件上作改變。
影像多次處理後會跑掉,是今天re-code專題程式發現的詭異情況,只知道,詳細原因不明,因為這個問題害我損失很多時間。
實驗開始
開啟一個圖檔,三個Image物件分別Load同一個檔案,之後每按一次實驗按鈕,就重新指定Image的所有像素值,詳見實驗碼。
- 圖1、左邊的Image,直接針對Image設定pixel數值。
- 圖2、中間的Image,在Bitmap上完成設定,在設定給Image物件。
- 圖3、右邊的Image,拿完成設定的bitmap給Image繪圖。
按下第二次的結果,中間直接設定Bitmap給Image的開始扭曲第三次的結果更是糟糕
第十次的結果就不用說了,整個就是不能看了
實驗程式碼
void __fastcall TForm1::Button2Click(TObject *Sender)結論
{
BYTE* pptr;
int h,w;
// Image1
for (h=Image1->Height-1 ; h>=0 ; --h)
{
pptr =(BYTE*)Image1->Picture->Bitmap->ScanLine[h];
for (w=0 ; w<Image1->Width ; ++w)
{
Image1->Canvas->Pixels[w][h] =
(TColor)RGB(pptr[w*3+2],pptr[w*3+1],pptr[w*3]);
}
}
// Image2
Graphics::TBitmap *bmp = new Graphics::TBitmap();
bmp->Width = Image2->Width;
bmp->Height = Image2->Height;
for (h=Image2->Height-1 ; h>=0 ; --h)
{
pptr =(BYTE*)Image2->Picture->Bitmap->ScanLine[h];
for (w=0 ; w<Image2->Width ; ++w)
{
bmp->Canvas->Pixels[w][h] =
(TColor)RGB(pptr[w*3+2],pptr[w*3+1],pptr[w*3]);
}
}
Image2->Picture->Graphic = bmp;
delete bmp;
// Image3
Graphics::TBitmap *bmp2 = new Graphics::TBitmap();
bmp2->Width = Image3->Width;
bmp2->Height = Image3->Height;
for (h=Image3->Height-1 ; h>=0 ; --h)
{
pptr =(BYTE*)Image3->Picture->Bitmap->ScanLine[h];
for (w=0 ; w<Image3->Width ; ++w)
{
bmp2->Canvas->Pixels[w][h] =
(TColor)RGB(pptr[w*3+2],pptr[w*3+1],pptr[w*3]);
}
}
Image3->Canvas->Draw(0,0,bmp2);
delete bmp2;
}
結論就是我還沒有結論(倒)
目前只能避開這個因素,要作影像的處理就要用畫的,或是直接在Imag物件上作改變。
留言
在Image2中,可在設定width和height之後,
再加下列一行程式碼,設定pixel深度為24 bits,
就可避免問題產生。
bmp->PixelFormat = pf24bit;
若為24位元影像,則設為pf24bit。