Re: [問題] 請教LockBits問題

看板C_and_CPP作者 (小瑜)時間14年前 (2009/11/19 22:32), 編輯推噓6(607)
留言13則, 2人參與, 最新討論串2/2 (看更多)
: 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 ); : //以指標取得影像資料的起始位址 unsigned char *ptr = (unsigned char*)bmpData->Scan0.ToPointer(); int padding = bmpData->Stride - 3 * bmp->Width; : //計算此bmpData共有多少byte : int bytes = bmpData->Stride * bmp->Height; //可以直接對 bmpData 的資料作修改 int i=0; for(int h=0; h < bmp->Height;h++) { for(int w=0; w < bmp->Width;w++) { ptr[i] = 255-ptr[i]; i++; } i += padding; } : bmp->UnlockBits( bmpData ); : //顯示最後結果 : pictureBox2->Image=bmp; : } : 可以執行,但是pictureBox2跟本沒有東西??? : 是否取像素值的方式有問題?? 大概是這樣吧 有錯自己再修一下 剛剛想偷懶 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.116.130.211

11/19 22:40, , 1F
可以執行,但是完全沒有圖在pictureBox2內???
11/19 22:40, 1F

11/19 22:49, , 2F
你把這個程式放在按鍵事件試試
11/19 22:49, 2F

11/19 22:50, , 3F
我剛改成ptr[i] = 255 是有效果 全白,
11/19 22:50, 3F

11/19 22:51, , 4F
但如果是 ptr[i] = 255-ptr[i]; 變全灰??
11/19 22:51, 4F

11/19 22:54, , 5F
理論上ptr[i] =255-ptr[i];應該會看到補色的效果,
11/19 22:54, 5F

11/19 23:04, , 6F
每一行要是4的倍數 byte 不夠要自己補
11/19 23:04, 6F
※ 編輯: joefaq 來自: 140.116.130.211 (11/19 23:16)

11/19 23:28, , 7F
還是怪怪的.....
11/19 23:28, 7F

11/19 23:35, , 8F
我沒有打得很精確 你要自己把細節做好 像是圖像格式那邊
11/19 23:35, 8F

11/19 23:55, , 9F
格式那我改成PixelFormat::Format24bppRgb後,圖的上面
11/19 23:55, 9F

11/19 23:56, , 10F
大約三分之一的部分已經有補色的效果,但下面三分之二
11/19 23:56, 10F

11/19 23:56, , 11F
還是沒變化....
11/19 23:56, 11F

11/20 00:03, , 12F
成功了,再將第二個回圈內改成 3*bmp->Width 就OK了
11/20 00:03, 12F

11/20 00:03, , 13F
感謝 joefaq 大 ^^
11/20 00:03, 13F
文章代碼(AID): #1B1LS1hu (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1B1LS1hu (C_and_CPP)