→ s4300026: 感謝樓上回覆 03/11 11:47
http://ideone.com/LZ8fQI
撰寫想法如下:
1. 讀入tiff檔
2. 把tiff檔中的frames取出,並作為 BitmapSource 來源
3. 宣告 Bitmap (PixelFormat::Format16bppGrayScale) 與 BitmapData
(我不確定兩者的差異性,bitmap應該是整個檔案,bitmapData應該是指RawData吧?)
4. 把BitmapSource轉存至BitmapData
5. 把BitmapData轉存至ByteArray
6. 把ByteArray轉存至BitArray (BitArray是Class,不是Array)
7. 執行訊號處理
for (int i = 0; i < bitArray->Length; i+=16)
{
for (int j = 0; j < 12; j++)
bitArray[i] = bitArray[i + j + 4];
for (int j = 12; j < 16; j++)
bitArray[i] = false;
}
8. 把BitArray轉回至ByteArray
9. 把byteArray轉回至bitmapData
10. 最後輸出bitmap
----------------------
繞了一圈,我覺得我像白癡一樣,因為我很希望直接對tiff的影像做處理
不要在那邊轉來轉去的
而且還不知道錯在哪裡
不知道有沒有先進有遇到相關問題並順利解決的呢?
----------------------
附加的其他問題
1. bitmap 雖然可以存 16bit灰階
但其
GetPixel(Int32,Int32)
SetPixel(Int32,Int32,Color)
的通訊方式是 Color (RGB 8bit)
我不知道該如何使用上述方法於 16bit灰階上
也不知道該怎麼顯示在螢幕上
2. 影像處理方面
using namespace System::Windows::Media::Imaging;
using namespace System::Drawing::Imaging;
也不是很熟練,也不知道該怎麼去互轉
雖然我有看到有人把他們用iostream的方式轉存
但這樣轉來轉去實在是 花時間、不直觀
個人很想要直接對原始資料做處理
3. 不太清楚 Bitmap 與 BitmapData 的關係
以上,感謝大家的回應
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 220.128.115.242
※ 文章網址: https://www.ptt.cc/bbs/C_Sharp/M.1489037610.A.803.html
各位大大好
小弟有個訊號處理的問題遇到瓶頸:
我想知道 C# 中如何互相交換影像資料與更改圖檔資料
--------------------------------
背景敘述如下:
我有個硬體,會將14bit的灰階影像儲存在16bit的tiff影像格式中
我想要將原始資料位移兩個bit如下,希望提高亮度:
0000 1234 5678 9012 變成 0012 3456 7890 1200
以下是我撰寫的程式碼,編譯可以過,但是會跳錯誤 (C++/CLI)