1
下面的代碼(來自此主題:How to use Delphi 2010's new WIC capability on Canon files?)將WIC圖像打開成BitMap。但是,如果WIC像素值的動態範圍很大,則該代碼會丟失大量信息,因爲它必須將寬動態範圍縮放到位圖像素可以容納的低範圍。如何閱讀WIC圖像中的像素
procedure TForm116.Button1Click(Sender: TObject);
var
WIC: TWICImage;
begin
WIC := TWICImage.Create;
try
WIC.LoadFromFile('MyFilename.raw');
Image1.Picture.Graphic.Assign(WIC);
finally
WIC.Free;
end;
end;
誰能告訴我的示例代碼,它可以讓我直接從TWICImage讀出的像素值,所以不會丟失信息我可以訪問圖像數據嗎?我需要每個像素的亮度(灰度)值,如果不能直接使用,可能可以從RGB值計算出來?
喜歡的東西:
var
PixelValue: Integer; // Grayscale
for Row := 0 to WIC.Width do
for Col := 0 to WIC.Height
PixelValue := WIC.GetPixelValue(Row, Col);
正如我注意到(或許不正確地)在原來的職位,在TBitMap的像素具有從0..255的範圍內(作爲返回,例如,通過掃描線在一個PByteArray。)一個WIC圖像,但是,可以有像素的值在成千上萬或更多... 庫代碼調用(在我的原始文章)Image1.Picture.Graphic.Assign WIC)將較大範圍(比如0..10000)縮放到(0..255),因此失去了很多細節。 – RobertFrank 2010-08-23 19:58:51
位圖可以有許多不同的顏色深度,從單色(1位)到更常見的24/32位(4字節,20億collors)甚至更高。那麼對於24位或32位位圖的顏色值是一個32位整數 - 遠遠超過0-255。我認爲你的誤解是,對於32位位圖,它的單個顏色分量的範圍是0-255,而不是像素。要獲得灰度值,您可以通過您選擇的功能發送這些顏色分量,以生成0-255灰度值。 – GrandmasterB 2010-08-23 20:55:01
加農炮原始文件可能是高動態範圍圖像(曝光等),其中可能包括完整的浮點頻譜。這些文件在Delphi支持的任何格式(或顯示器)上都沒有1:1映射。在這種情況下,要查找的關鍵字是_tone mapping_。 – 2010-08-24 13:10:49