Поделиться через


Метод IPrintOemUni::MemoryUsage (prcomoem.h)

Метод IPrintOemUni::MemoryUsage можно использовать с принтерами, поддерживаемыми Unidrv, чтобы указать объем памяти, необходимый для использования методом IPrintOemUni::ImageProcessing подключаемого модуля отрисовки.

Синтаксис

HRESULT MemoryUsage(
  PDEVOBJ         pdevobj,
  POEMMEMORYUSAGE pMemoryUsage
);

Параметры

pdevobj

Указатель на структуру DEVOBJ , предоставленный вызывающим объектом.

pMemoryUsage

Указатель на структуру OEMMEMORYUSAGE , поставляемый вызывающим абонентом.

Возвращаемое значение

Метод должен возвращать одно из следующих значений.

Код возврата Описание
S_OK
Операция успешно выполнена.
E_FAIL
Операция не удалась.
E_NOTIMPL
Метод не реализован.

Комментарии

Цель IPrintOemUni::MemoryUsage метода — помочь драйверу Unidrv определить оптимальный размер поверхности рисования GDI на основе требований к памяти метода IPrintOemUni::ImageProcessing . Реализация метода является необязательной IPrintOemUni::MemoryUsage .

Метод IPrintOemUni::MemoryUsage должен возвращать два значения следующим образом:

  • Объем постоянно выделенной памяти фиксированного размера, необходимой методу IPrintOemUni::ImageProcessing .

    Это значение возвращается в элементе dwFixedMemoryUsage структуры OEMMEMORYUSAGE .

  • Объем памяти, необходимый для хранения растрового изображения после завершения обработки методом IPrintOemUni::ImageProcessing .

    Подключаемый модуль отрисовки либо возвращает это обработанное растровое изображение в Unidrv, либо подоулирует его. Объем памяти, необходимый для хранения обработанного растрового изображения, возвращается в элементе dwPercentMemoryUsage структуры OEMMEMORYUSAGE и выражается в процентах от размера исходного растрового рисунка.

Значение, возвращаемое в элементе dwPercentMemoryUsage , должно включать, помимо размера обработанного растрового рисунка, объем дополнительных выделений памяти, зависящих от размера исходного растрового рисунка.

Член dwMaxBandSize структуры OEMMEMORYUSAGE предоставляется Unidrv и задает максимальный размер полосы по умолчанию.

Прежде чем драйвер Unidrv создаст поверхность для рисования, он запрашивает GDI, чтобы определить оптимальный размер для растровых изображений на основе доступной системной памяти. Это оптимальное пространство памяти должно быть общим для каждого растрового изображения полосы между исходным растровым рисунком, передаваемым методу IPrintOemUni::ImageProcessing , и обработанным растровым изображением (обычно меньшего размера), которое метод возвращает или выводит. Unidrv вызывает метод подключаемого IPrintOemUni::MemoryUsage модуля отрисовки, если он существует, и использует результат, чтобы вычислить, как лучше всего разделить оптимальное пространство памяти.

Например, предположим, что GDI сообщает, что оптимальный объем памяти для рисования составляет 6 мегабайт (содержится в элементе dwMaxBandSize структуры OEMMEMORYUSAGE), а метод подключаемого модуля IPrintOemUni::MemoryUsage отрисовки возвращает значения нуля для dwFixedMemoryUsage и 50 для dwPercentMemoryUsage. Значение 50 означает, что выходные растровые изображения метода IPrintOemUni::ImageProcessing будут на 50 % меньше исходных растровых изображений. Таким образом, Unidrv выделит исходное растровое изображение размером 4 мегабайта, в результате чего выходные растровые изображения будут составлять 2 мегабайта.

IPrintOemUni::MemoryUsage Если метод не указан, Unidrv выделяет все оптимальное доступное пространство для исходного растрового изображения. Это допустимо, если метод IPrintOemUni::ImageProcessing возвращает обработанное растровое изображение в пространстве памяти, выделенном для исходного растрового изображения. Однако если метод IPrintOemUni::ImageProcessing подключаемого модуля отрисовки выделяет место для целевого растрового изображения, но не предоставляет IPrintOemUni::MemoryUsage метод, в результате для растровых изображений будет выделено больше памяти, чем оптимальный доступный размер, что может привести к снижению производительности.

Метод IPrintOemUni::MemoryUsage является необязательным. Если подключаемый модуль отрисовки реализует этот метод, метод IPrintOemUni::GetImplementedMethod подключаемого модуля должен возвращать S_OK при получении "MemoryUsage" в качестве входных данных.

Требования

Требование Значение
Целевая платформа Персональный компьютер
Верхняя часть prcomoem.h (включая Prcomoem.h)

См. также раздел

DEVOBJ

IPrintOemUni

IPrintOemUni::ImageProcessing

OEMMEMORYUSAGE