Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
14-1097259853
DeadMeat
2004-10-08 22:24
2004.10.31
Раз уж дело зашло о старом железе...


1-1098018449
denis24
2004-10-17 17:07
2004.10.31
множественный выбор из одного listbox в другой


1-1098171059
Сергей__С
2004-10-19 11:30
2004.10.31
TreeView


14-1097247121
RexWell
2004-10-08 18:52
2004.10.31
Кладовка


14-1097582942
Суслик
2004-10-12 16:09
2004.10.31
Спам роботы





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский