Форум: "Основная";
Текущий архив: 2004.10.31;
Скачать: [xml.tar.bz2];
ВнизКопирование Printer.Canvas в Bitmap Найти похожие ветки
← →
AlexKocharin © (2004-10-13 20:59) [0]Как скопировать изображение из канвы принтера (printer.canvas)
в Bitmap?
Пробовал и BitBlt, и StretchBlt, и canvas.CopyRect,
и canvas.assign - не помогает.
← →
Гаврила © (2004-10-13 21:33) [1]Через метафайл попробуй
← →
TUser © (2004-10-13 21:52) [2]Почему Canvas.CopyRect не помогает?
← →
Sun bittern © (2004-10-14 06:03) [3]BrushCopy()?
← →
AlexKocharin © (2004-10-14 07:59) [4]
bmp.Width:=printer.PageWidth;
bmp.Height:=printer.PageHeight;
bmp.Canvas.CopyRect(
rect(0,0,printer.PageWidth,printer.PageHeight),printer.Canvas,
rect(0,0,printer.PageWidth,printer.PageHeight));
bmp.SaveToFile("1.bmp");
Выводит файл, содержащий белое полотно 2892x3969 px.
(А на канва принтера у меня не пустая)
← →
AlexKocharin © (2004-10-14 08:16) [5]Через BrushCopy вроде то же самое.
← →
ЮЮ © (2004-10-14 08:26) [6]А кто обещал, что нарисованное на printer.Canvas где-то хранится?
TBitmap.Canvas - да, т.к. Drawing on the canvas effectively modifies the underlying bitmap image pixels.
← →
AlexKocharin © (2004-10-14 08:34) [7]//Через метафайл попробуй
А как скопировать в метафайл?
И какая будет разница?
← →
AlexKocharin © (2004-10-14 08:51) [8]А кто обещал, что нарисованное на printer.Canvas где-то хранится?
При печати сначала формируется изображение, а потом методом EndDoc посылается на печать.
Должно же оно до EndDoc"а где-то храниться.
Каждое следующее изображение, наносимое на канву, затирает то,
что было раньше на этом месте, т.е. изменяет канву, а не просто добавляет новые байты (иначе при наложении изображений было бы много глюков).
← →
AlexKocharin © (2004-10-14 16:55) [9]Что, никак нельзя, что ли?
← →
Fenik (2004-10-14 22:06) [10]Как изображение попало на printer.Canvas?
Может лучше до этого момента его ловить?
← →
_iceman_ © (2004-10-15 00:29) [11]To AlexKocharin ©
Я так понимаю, что ты тоже наступил на те же грабли, что и я когда-то. Приведенная ниже процедура почти полностью взята с Unoficial Delphi Printer Pages (кажется так). А дело все, видимо, в принтере, а точнее в драйверах. Например, для HP LJ 2200 с драйверами PS и PCL6 CopyRect для одного будет работать, а для другого нет.procedure PrintImage(AImage: TImage);
var
Info: PBitmapInfo;
InfoSize, ImageSize: DWord;
Image: Pointer;
begin
Printer.BeginDoc;
GetDIBSizes(AImage.Picture.Bitmap.Handle, InfoSize, ImageSize);
Info:=AllocMem(InfoSize);
try
Image:=AllocMem(ImageSize);
try
GetDIB(AImage.Picture.Bitmap.Handle, 0, Info^, Image^);
StretchDIBits(Printer.Canvas.Handle,
0, 0, Printer.PageWidth, Printer.PageHeight,
0, 0, AImage.Width, AImage.Height,
Image, Info^, DIB_RGB_COLORS, SRCCOPY);
finally
FreeMem(Image, ImageSize);
end;
finally
FreeMem(Info, InfoSize);
end;
Printer.EndDoc;
end;</code
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.10.31;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.037 c