Иллюстрированный самоучитель по Delphi 7 для профессионалов

Вывод графики с использованием отображаемых файлов

Теперь загруженные данные нужно суметь нарисовать на канве, в данном случае на канве объекта PaintBox. Делается это следующим образом:

procedure TForml.PaintMe(Sender: TObject);
var OldP: hPalette;i: integer;
begin
if Memory=nil then Exit;
OldP: = SelectPalette(PaintBox.Canvas.Handle, Palette, False);
RealizePalette(PaintBox.Canvas.Handle);
SetStretchBltMode(PaintBox.Canvas.Handle, STRETCH_DELETESCANS);
case ViewMode of
vmStretch:
with bminfo^ do
i: =
StretchDIBits(PaintBox.Canvas.Handle,
0.0,PaintBox.Height,PaintBox.Width,
0.0,biWidth,Abs(biHeight),
Memory, pBitmapInfo(bminfo)^, DIB_RGB_COLORS,
PaintBox.Canvas.CopyMode);
vmlxl:
with bminfoA,PaintBox.ClientRect do
i: = SetDIBitsToDevice
(PaintBox.Canvas.Handle,Left,Top,Right-Left,
Bottom-Top,
Left,Top,Top,Bottom-top,
Memory, pBitmapInfо(bminfo)^, DIB_RGB_COLORS);
vmZoom:
begin
with bminfo^,PaintBox.ClientRect do
i: = StretchDIBits
(PaintBox.Canvas.Handle,Left,Top,Right-Left,
Bottom-Top,
0.0,biWidth,Abs(biHeight),
Memory, pBitmapInfo(bminfo)^, DIB_RGB_COLORS, PaintBox.Canvas.CopyMode);
end;
end;
if (i=0) or (i=GDI_ERROR) then
begin
ec: = GetLastError;
Forml.Caption: = 'Error code '+IntToStr(ec);
end;
SelectPalette(PaintBox.Canvas.Handle, OldP, False);
end;

В зависимости от установленного режима отображения (vmstretch, vmzoom или vmlxl) применяются разные функции WIN API: stretchoisits или SetoiBitsToDevice. Выигрыш в скорости работы приложения особенно ощущается, если загружаемые файлы становятся велики и должны размещаться в файле подкачки. Наше же приложение не использует его и отображает данные прямо из файла на экран (рис. 10.3).

Иллюстрированный самоучитель по Delphi 7 для профессионалов › Использование графики › Вывод графики с использованием отображаемых файлов
Рис. 10.3. Этот снимок с метеорологического спутника имеет размер десятки мегабайт

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.