Re: Вывод на форму изображения из памяти
От: Dimonka Верблюд  
Дата: 14.05.07 07:36
Оценка:
Здравствуйте, nya, Вы писали:

nya>Здравствуйте. Извините за ламерский вопрос

nya>Ситуация такая: в памяти есть изображение — bitmap (получено с камеры). Есть указатель на него, известны размеры. Как вывести его на форму?
nya>(Builder 6)
nya>Я искал информацию по этой теме, и не нашел. если она уже обсуждалась — дайте, пожалуйста, ссылку.
nya>Спасибо.

Самый простой и понятный способ — это просто саздать Bitmap и перекинуть данные в него:

function CreateBitmapFromData(Data: Pointer; DataWidth, DataHeight: integer;
  PixelSize: byte): TBitmap;
var
  y: integer;
  Ptr: pointer;
  ScanlineSize: integer;
  DataPixelFormat: TPixelFormat;
begin
  case PixelSize of
  1: DataPixelFormat := pf8bit;
  2: DataPixelFormat := pf16bit;
  3: DataPixelFormat := pf24bit;
  4: DataPixelFormat := pf32bit;
  else
    Raise EInvalidGraphic.Create('Unknown format!');
  end;
  result := TBitmap.Create;
  result.Width := DataWidth;
  result.Height := DataHeight;
  result.PixelFormat := DataPixelFormat;
  ScanlineSize := DataWidth * PixelSize;
  for y := 0 to DataHeight - 1 do
  begin
    Ptr := result.ScanLine[y];
    Move(pointer(integer(Data) + y * ScanlineSize)^, Ptr^, ScanlineSize);
  end;
end;

Исходные данные:
Data — Указатель на данные
DataWidth, DataHeight — размер картинки по адресу Data
PixelSize — количество байт, занимаемые одним пикселом

Возвращает функция (я надеюсь ) готовую картинку
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.