Как читать пиксели в картинке WIC - PullRequest
1 голос
/ 23 августа 2010

Приведенный ниже код (из этой темы: Как использовать новую функцию WIC в Delphi 2010 для файлов Canon? ) открывает изображение WIC в BitMap.

Однако, если динамический диапазон значений пикселей 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);

1 Ответ

0 голосов
/ 23 августа 2010

Вы должны иметь возможность assign() TWICImage для TBitmap, а затем получить доступ к свойству Pixels или ScanLine для растрового изображения, чтобы получить данные пикселей.Так же, как и при загрузке JPEG.

Например (псевдокод не проверен)

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