頁:
[1]
影像處理Lockbit處理截圖的方法
最近在研究利用C#做影像處理想到要選取一張圖片的特定範圍
進行擷取動作
網上找到一篇文章
https://stackoverflow.com/questions/10771300/bitmap-lockbits-confusion?answertab=votes#tab-top
蠻符合自己的需求的
但是解答者for迴圈中的row、pixel、pixelComponent三條式子
我不太懂它們的意思
想請問有前輩可以幫忙解惑嗎?
謝謝
...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div><div></div> 大大你好,小弟只是個新手,底下為個人解讀,您參考看看:
底下轉貼大大所提及的 stackoverflow 的連結的原代碼加上個人註解......
var bitmap = new Bitmap(100, 100);
var data = bitmap.LockBits(new Rectangle(0, 0, 10, 10),
ImageLockMode.ReadWrite,
bitmap.PixelFormat);
//pt指到點陣圖中的第一個像素資料的位址
var pt = (byte*)data.Scan0;
//利用Bitmap的資料列掃描寬度除以Bitmap的圖像寬度來取得每個像素點所占位元組
var bpp = data.Stride / bitmap.Width;
//此例中 data 的Height 與 Wdth均為10個 pixel
for (var y = 0; y < data.Height; y++)
{
// pt+(y * data.Stride) 來指向每一列的第一筆資料的位址
var row = pt + (y * data.Stride);
for (var x = 0; x < data.Width; x++)
{
//取得每個Pixel 的位址, row代表每行資料第一筆的位址, bpp是每個Pixel 所占位元組
//所以用 row + x*bpp 來取得每個像素點的起位址
var pixel = row + x * bpp;
//底下 bit 應該是打錯了,應該是 byte而不是bit
for (var bit = 0; bit < bpp; bit++)
{
//將所要擷取的像素點的每一個byte內容存放到pixelComponent變數中
var pixelComponent = pixel;
}
}
}
bitmap.UnlockBits(data);
以上僅就 stackoverflow 上的原代碼來解讀...
不過建議大大再看一下該網站上底下的其他人留言.......
...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div> 其實大大可以使用Bitmap的Clone方法來選取你要的區域
如果需要進行Byte處理,再將Clone的Bitmap轉成Byte Array即可
參考看看囉 ~ sggleeee 發表於 2017-12-4 09:19 PM static/image/common/back.gif
大大你好,小弟只是個新手,底下為個人解讀,您參考看看:
底下轉貼大大所提及的 stackoverflow 的連結的原 ...
好的謝謝大大
說明得很清楚我會再花些時間研究 sggleeee 發表於 2017-12-5 12:55 AM static/image/common/back.gif
其實大大可以使用Bitmap的Clone方法來選取你要的區域
如果需要進行Byte處理,再將Clone的Bitmap轉成Byte Ar ...
謝謝您的建議
我會嘗試看看<br><br><br><br><br><div></div>
以前寫的C# 快速存取Bitmap pixel 你可以參考看看
(請自己補上.)
null-adventure-diarytwo.blogspot com/2017/12/c-bitmap-pixel.html
頁:
[1]