Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Превращение кода VB в Delphi: извлечение изображения из EMF-файла

Delphi , Графика и Игры , MetaFile

Превращение кода VB в Delphi: извлечение изображения из EMF-файла

При поиске в Интернете я нашел несколько строк кода на VB для извлечения изображения из файла EMF. Я пытался преобразовать этот код в Delphi, но он не работал. Помогите мне преобразовать этот код в Delphi.

Описание проблемы

Вопрос заключается в том, как преобразовать код на VB для извлечения изображения из файла EMF в код на Delphi, чтобы он работал корректно.

Контекст

В контексте имеется код на VB, который извлекает изображение из файла EMF с помощью функции обратного вызова EnumMetaFileProc. Этот код использует структуры данных, такие как EMR, EMRSTRETCHDIBITS, BITMAPINFO, и функции Windows API, такие как PlayEnhMetaFileRecord, CreateDC, CreateDIBitmap, и DeleteDC.

Подтвержденный ответ

Ниже представлен перевод кода на VB в код на Delphi:

function Callback_EnumMetafile(
  hdc: HDC;
  lpHTable: PHandleTable;
  lpMFR: PMetaRecord;
  nObj: Integer;
  lpClientData: LParam
): Integer; stdcall;
var
  PEnhEMR: TEMR;
  PEnhStretchDIBits: TEMRStretchDIBits;
  BitmapInfo: TBitmapInfo;
  pBitmapInfo, pBitsMem: Pointer;
  tmpDc: HDC;
  hBitmap: HBitmap;
  RecordCount: Integer;
begin
  {$J+}
  const
    RecordCount: Integer = 0;
  {$J}

  Inc(RecordCount);

  CopyMemory(@PEnhEMR, lpMFR, SizeOf(PEnhEMR));

  case PEnhEMR.iType of
    1:
      RecordCount := 1;
    emr_StretchDIBits:
      begin
        CopyMemory(@PEnhStretchDIBits, lpMFR, SizeOf(PEnhStretchDIBits));
        pBitmapInfo := Pointer(Cardinal(lpMFR) + PEnhStretchDIBits.offBmiSrc);
        CopyMemory(@BitmapInfo, pBitmapInfo, SizeOf(BitmapInfo));
        pBitsMem := Pointer(Cardinal(lpMFR) + PEnhStretchDIBits.offBitsSrc);

        tmpDc := CreateDC('DISPLAY', nil, nil, nil);
        hBitmap := CreateDIBitmap(tmpDc, @BitmapInfo.bmiHeader, cbm_Init,
          pBitsMem, @BitmapInfo, dib_RGB_Colors);
        DeleteDC(tmpDc);
      end;
  end;

  Result := 1;
end;

Альтернативный ответ

Если вы работаете с metafiles, рассмотрите возможность использования класса TMetafile из модуля Graphics. Он может облегчить вашу работу с metafiles в Delphi.

Пример кода на Object Pascal (Delphi) для извлечения изображения из EMF-файла

Ниже представлен пример кода на Object Pascal (Delphi) для извлечения изображения из файла EMF с использованием класса TMetafile:

procedure ExtractImageFromEMFFile(const EMFFileName: string);
var
  MetaFile: TMetafile;
  Bitmap: TBitmap;
begin
  MetaFile := TMetafile.Create;
  try
    MetaFile.LoadFromFile(EMFFileName);

    Bitmap := TBitmap.Create;
    try
      Bitmap.Assign(MetaFile);
      // Здесь можно использовать Bitmap для отображения или сохранения изображения
    finally
      Bitmap.Free;
    end;
  finally
    MetaFile.Free;
  end;
end;

Этот пример создает объекты TMetafile и TBitmap, загружает metafile из файла, назначает его TBitmap, и затем можно использовать TBitmap для отображения или сохранения изображения.

Создано по материалам из источника по ссылке.

Контекст: Преобразование кода VB в Delphi для извлечения изображения из файла EMF.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: MetaFile ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-19 13:29:56
2024-11-21 11:51:30/0.0035829544067383/0