1

下面的代码(来自此线程:如何在佳能文件上使用 Delphi 2010 的新 WIC 功能?)将 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);
4

1 回答 1

0

您应该可以assign()将 TWICImage 转换为 TBitmap,然后访问该位图的 Pixels 或 ScanLine 属性以获取像素数据。就像您在加载 JPEG 时所做的一样。

例如(未经测试的伪代码)

w := TWICImage.Create();
w.LoadFromFile(...)
b := TBitmap.Create;
b.assign( w);
ptr := b.ScanLine[...]
于 2010-08-23T18:10:42.357 回答