[問題] 請教LockBits問題
最近為了要加快影像處理的速度,所以到MSDN找
了關於LockBits的用法,但是在取出像素值時出
了點問題,導致我目前連做個RGB互補色轉換的結果
都會怪怪的,我是用VC++ 2008寫的,以下是簡短的code,
是否可以請有經驗的人幫忙看看:
private: System::Void Form1_Load(sender,e)
{
//將pictureBox1內的影像資料給設給bmp
Bitmap^ bmp = gcnew Bitmap(pictureBox1->Image);
//指定要鎖定的影像範圍
Rectangle rect = Rectangle(0,0,bmp->Width,bmp->Height);
//在BitmapData內,再指定記憶體的拴鎖模式與Bitmap的資料格式
Imaging::BitmapData^ bmpData = bmp->LockBits( rect,
Imaging::ImageLockMode::ReadWrite, bmp->PixelFormat );
//以指標取得影像資料的起始位址
IntPtr ptr = bmpData->Scan0;
//計算此bmpData共有多少byte
int bytes = bmpData->Stride * bmp->Height;
//宣告一個一維(8位元不帶正負號的整數)的陣列,用來存下bmp影像的rgb值
array<Byte>^rgbValues = gcnew array<Byte> (bytes);//陣列大小是bytes
//從Unmanaged記憶體指標將資料複製到Unsigned Integer 陣列
Marshal::Copy( ptr, rgbValues, 0, bytes );
//做互補色轉換,(我是覺得這兩行有問題)
for (int counter=0; counter<rgbValues->Length; counter++)
rgbValues[ counter ] = 255-rgbValues[counter];
//將資料複製到 Unmanaged 記憶體指標
Marshal::Copy( rgbValues, 0, ptr, bytes );
//解開記憶體定
bmp->UnlockBits( bmpData );
//顯示最後結果
pictureBox2->Image=bmp;
}
可以執行,但是pictureBox2跟本沒有東西???
是否取像素值的方式有問題??
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 123.204.4.92
→
11/19 21:43, , 1F
11/19 21:43, 1F
→
11/19 21:48, , 2F
11/19 21:48, 2F
→
11/19 21:51, , 3F
11/19 21:51, 3F
討論串 (同標題文章)
以下文章回應了本文:
完整討論串 (本文為第 1 之 2 篇):