Кто сталкивался с подобным- помогите. Пробую распечатать изображение на цветном принтере - отлично распечатывается, пробую на лазерном - пустой лист. Перепробовал несколько принтеров - результат такой же. Попутно нашёл проблему: если в названии принтера есть русские буквы - вылетает исключение:
- Код: Выделить всё
raise EPrinter.Create('Unable to set default printer!');
Код для печати:
- Код: Выделить всё
procedure MyPrintBitmap(Bitmap: TBitmap);
var
printerDialog : TPrintDialog;
myPrinter : TPrinter;
ImageRect: TRect;
ScaleX, ScaleY: integer;
begin
// Создание диалога для выбора принтера
printerDialog:=TPrintDialog.Create(Form1);
// Вызываем диалог выбора принтера
if printerDialog.Execute then
begin
// Получаем доступ к глобальному объекту Printer
myPrinter := Printer;
with myPrinter do
begin
// Коэффициенты масштабирования изображения
ScaleX:= GetDeviceCaps(myPrinter.Canvas.Handle, logPixelsX) div XDPI;
ScaleY:= GetDeviceCaps(myPrinter.Canvas.Handle, logPixelsY) div YDPI;
// Начало печати
BeginDoc;
// Отрисовка нашего изображения на виртуальной канве принтера
ImageRect:=Rect(0, 0, Bitmap.Width * ScaleX, Bitmap.Height * ScaleY);
Canvas.StretchDraw(ImageRect,Bitmap);
// Конец печати
EndDoc;
end;
end;
end;
UPD: Поправочка, принтер печатает, я добавил текст - текст вывелся, а картинка нет. Похоже проблема в Canvas.StretchDraw(ImageRect,Bitmap);
UPD2: Разобрался, StretchDraw не может нарисовать 32-х битные изображения. Новый вопрос - как преобразовать 32-хбитные картинки в 24-хбитные?