如何在WIC图像中读取像素

时间:2010-08-23 02:32:08

标签: delphi wic

下面的代码(来自此主题:How to use Delphi 2010's new WIC capability on Canon files?)将WIC图像打开到BitMap中。

但是,如果WIC像素值的动态范围很大,则此代码会丢失大量信息,因为它必须将宽动态范围缩放到Bitmap像素可以容纳的低范围内。

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);

1 个答案:

答案 0 :(得分:0)

您应该能够assign() TWICImage到TBitmap,然后访问位图的Pixels或ScanLine属性以获取像素数据。就像加载JPEG时一样。

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

w := TWICImage.Create();
w.LoadFromFile(...)
b := TBitmap.Create;
b.assign( w);
ptr := b.ScanLine[...]