作者s4300026 (s4300026)
看板C_Sharp
标题[问题] tiff、Bitmap影像处理
时间Thu Mar 9 13:33:26 2017
各位大大好
小弟有个讯号处理的问题遇到瓶颈:
我想知道 C# 中如何互相交换影像资料与更改图档资料
--------------------------------
背景叙述如下:
我有个硬体,会将14bit的灰阶影像储存在16bit的tiff影像格式中
我想要将原始资料位移两个bit如下,希望提高亮度:
0000 1234 5678 9012 变成 0012 3456 7890 1200
以下是我撰写的程式码,编译可以过,但是会跳错误 (C++/CLI)
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://webptt.com/cn.aspx?n=bbs/C_Sharp/M.1489037610.A.803.html
2F:→ s4300026: 感谢楼上回覆 03/11 11:47