Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.10.31;
Скачать: CL | DM;

Вниз

Копирование 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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.023 c
9-1086552884
xman
2004-06-07 00:14
2004.10.31
Алгоритмы


14-1097345866
olookin
2004-10-09 22:17
2004.10.31
4-0


3-1096889723
NewDelpher
2004-10-04 15:35
2004.10.31
Временные таблицы в функциях


14-1097231421
Jaxtor
2004-10-08 14:30
2004.10.31
UML моделирование


1-1097610950
Offspring
2004-10-12 23:55
2004.10.31
TList ??