пиксели екран-принтер
5 отговора
0 прегледа
пиксели екран-принтер
Реших да си направя програмка , която да разпечатва файл - bmp. Направих си една форма. Сложих си Image1 на него. на OnCreate на формата - зададох Hight и Width да са 2480 и 3508. (от нейде прочетох че толкова са пикселите на А4 формата). После му давам - LoadfromFile да изчете някаква картинка и да я разтегли до размерите на Imiage1. И след тва - към принтера и Out навън.
Да ама не! На принтера ми излезна картинката на 16 страници. А ако дам Save на файла - размерът му е над 33МБ (в BMP формат)
Та питането ми е дали има несъответствие на пикселите на екран и принтер? И ако е така да обръщам всичко в см или инчове ли? Или съм попрекалил с тревата???
Да ама не! На принтера ми излезна картинката на 16 страници. А ако дам Save на файла - размерът му е над 33МБ (в BMP формат)
Та питането ми е дали има несъответствие на пикселите на екран и принтер? И ако е така да обръщам всичко в см или инчове ли? Или съм попрекалил с тревата???
Ами да поразсъждаваме, като начинаещи
Ами да поразсъждаваме, като начинаещи :)
Да си предтсавим монитор найси инча. Той може да работи от 600х800 до 2048х1600 точки. Мислиш ли, че всеки път, като си смениш разделителната способност на монитора, трябва да си купуваш нов принтер?
Ето ти един пример от Делфи 5, за обекта tPrinter:
Да си предтсавим монитор найси инча. Той може да работи от 600х800 до 2048х1600 точки. Мислиш ли, че всеки път, като си смениш разделителната способност на монитора, трябва да си купуваш нов принтер?
Ето ти един пример от Делфи 5, за обекта tPrinter:
procedure TForm1.Button1Click(Sender: TObject);
var
Bmp: TBitmap;
begin
Bmp := TBitmap.Create;
try
Bmp.LoadFromFile('MyBitmap.bmp');
with Printer do
begin
BeginDoc;
Canvas.Draw((PageWidth - Bmp.Width) div 2,
(PageHeight - Bmp.Height) div 2,
Bmp);
EndDoc;
end;
finally
Bmp.Free;
end;
end;
Редактирано от NikB на
Re: Ами да поразсъждаваме, като начинаещи
Примера ти за мащабирането го разбрах без проблеми. Тревогата ми е съвсем друга:
1.Ей го сайта (намерих го с гугъла) на който човечеца е дал акъм и е драснал пикселите за А4 -
[линк]
2.Идеята ми беше форма имидж или каквото там да е да е със същите пиксели на монитора. (естествено ако не се събере - има си плъзгачи от дясно и долу за таз работа)
3.И после цък тва от джама на печатащото и би требвало да е 1 към 1.... ама е 1 към 4 (към 16 страници)
Що аджеба е така мамката му стара????
Помислих че оня е объркал бройката на пикселита, ама гугъла и на друго място пак тва дава!!!
Продължавам да гледам умно телевизора и да псувам на ум!
1.Ей го сайта (намерих го с гугъла) на който човечеца е дал акъм и е драснал пикселите за А4 -
[линк]
2.Идеята ми беше форма имидж или каквото там да е да е със същите пиксели на монитора. (естествено ако не се събере - има си плъзгачи от дясно и долу за таз работа)
3.И после цък тва от джама на печатащото и би требвало да е 1 към 1.... ама е 1 към 4 (към 16 страници)
Що аджеба е така мамката му стара????
Помислих че оня е объркал бройката на пикселита, ама гугъла и на друго място пак тва дава!!!
Продължавам да гледам умно телевизора и да псувам на ум!
Re: пиксели екран-принтер
Преди доста години се борих с подобен проблем - да си аправя адекватно Print Preview. Направих следната процедура, която изпълнявам преди изчертаване:
procedure TGnrPriForm.PaintBoxSize(PaintBox1:TPaintBox);
var NewSize,WScr,HScr,WPrn,HPrn,ph,pw:Integer;
NormText:ShortString;
begin
NewSize:=48; NormText:='ABCg';
PaintBox1.Canvas.Font.Size:=NewSize; Printer.Canvas.Font.Size:=NewSize;
WScr:=PaintBox1.Canvas.TextWidth(NormText);
HScr:=PaintBox1.Canvas.TextHeight(NormText);
WPrn:=Printer.Canvas.TextWidth(NormText);
HPrn:=Printer.Canvas.TextHeight(NormText);
ph:=Printer.PageHeight; pw:=Printer.PageWidth;
PaintBox1.Width:=round(pw*WScr/WPrn);
PaintBox1.Height:=round(ph*HScr/HPrn);
end;
В PaintBox1.Canvas пиша, чератя, рисувам и т.н. това, което извеждам в Printer.Canvas за отпечатеане на принтера. Излиза по един и същ начин и на принтера и на монитора. Ако се избере друг принтер, друг формат и др., отново се изпълнява горната процедура.
procedure TGnrPriForm.PaintBoxSize(PaintBox1:TPaintBox);
var NewSize,WScr,HScr,WPrn,HPrn,ph,pw:Integer;
NormText:ShortString;
begin
NewSize:=48; NormText:='ABCg';
PaintBox1.Canvas.Font.Size:=NewSize; Printer.Canvas.Font.Size:=NewSize;
WScr:=PaintBox1.Canvas.TextWidth(NormText);
HScr:=PaintBox1.Canvas.TextHeight(NormText);
WPrn:=Printer.Canvas.TextWidth(NormText);
HPrn:=Printer.Canvas.TextHeight(NormText);
ph:=Printer.PageHeight; pw:=Printer.PageWidth;
PaintBox1.Width:=round(pw*WScr/WPrn);
PaintBox1.Height:=round(ph*HScr/HPrn);
end;
В PaintBox1.Canvas пиша, чератя, рисувам и т.н. това, което извеждам в Printer.Canvas за отпечатеане на принтера. Излиза по един и същ начин и на принтера и на монитора. Ако се избере друг принтер, друг формат и др., отново се изпълнява горната процедура.
Re: пиксели екран-принтер
Това, което се опитваш да направиш, просто не може да стане.
Няма фиксиран брой пиксели разделителна способност за печат на A4 страница. Това зависи от конкретния принтер, от настройките на драйвера му и т.н. Дори margins могат да се различават при различни настройки за един и същи модел. За справяне с проблема има различни подходи, но всички те се базират на използване на GetDeviceCaps с хендлъра на избрания принтер.
HORZRES и VERTRES дават хоризонталната и вертикалната резолюция на Printable Area. PHYSICALWIDTH и PHYSICALHEIGHT дават пълния размер на A4. A PHYSICALOFFSETX и PHYSICALOFFSETY дават левия и горния маргин. Тези данни са достатъчни за да си сметнеш печатната област от платното и да копираш (със съответното мащабиране) на нея картинката, която искаш да печаташ.
Mixy
Няма фиксиран брой пиксели разделителна способност за печат на A4 страница. Това зависи от конкретния принтер, от настройките на драйвера му и т.н. Дори margins могат да се различават при различни настройки за един и същи модел. За справяне с проблема има различни подходи, но всички те се базират на използване на GetDeviceCaps с хендлъра на избрания принтер.
HORZRES и VERTRES дават хоризонталната и вертикалната резолюция на Printable Area. PHYSICALWIDTH и PHYSICALHEIGHT дават пълния размер на A4. A PHYSICALOFFSETX и PHYSICALOFFSETY дават левия и горния маргин. Тези данни са достатъчни за да си сметнеш печатната област от платното и да копираш (със съответното мащабиране) на нея картинката, която искаш да печаташ.
Mixy