Ile Pixeli to Milimetr?
Nie wiem czy to pomoże (z jakiegoś starego faq - linka nie posiadam)
- Jak dostosować wydruk do różnych drukarek?
drukowanie, drukarka, rozdzielczość
Należy skorzystać z funkcji GetDeviceCaps z WinAPI i z modułu Printers. Na przykład:
procedure TForm1.Button1Click(Sender: TObject);
var XD,YD:Integer;
begin
XD:=GetDeviceCaps(Printer.Handle,LogPixelSX); // liczba pikseli na cal w poziomie
YD:=GetDeviceCaps(Printer.Handle,LogPixelSY); // liczba pikseli na cal w poziomie
with Printer,Printer.Canvas do
begin
Title:='Wydruk próbny';
BeginDoc;
try
// Linia w poprzek całej kartki
MoveTo(PageWidth,0);LineTo(0,PageHeight);
// Linia o długości 1 cala
MoveTo(0,0);LineTo(XD,YD);
finally
EndDoc;
end;
end;
end;
To jednak nie koniec. Okazuje się, że NetManiak ma do tego kilka uwag:
"Już znalazłem formułę, dzięki której można dokładnie obliczyć ile musi mieć pixeli linia, by na drukarce objawiła się jako 1 calowa. Teoretycznie powinno to być (jak sugeruje kolega BACIK, tudzież dokumentacja windows) LOGPIXELSX i LOGPIXELSY. Moje doświadczenia wskazują jednakże, iż rzeczywista wartość wynosi:
w poziomie: LOGPIXELX * PHYSICALWIDTH / HORZRES
w pionie: LOGPIXELSY * PHYSICALHEIGHT / VERTRES
gdzie LOGPIXELX - wynik funkcji GetDeviceCaps(LOGPIXELX ) itd...
Sprawdziłem to na 2 drukarkach: Cannon BJC4300 i HP (atramentówka, A4, oznaczenia nie pamiętam)."
Źródło informacji: Adam K. "NetManiak".
Berus123 napisał(a)
Ile Pixeli to Milimetr?
zależy przy jakim DPI
dpi = px / cal
cal = px / dpi
1cal = 25,4mm
1 mm = 1/25,4 cala
mm = (px * 25,4) / dpi
px = (mm * dpi) / 25,4
jak gdzieś nie zrobiłem błędu to masz
Znalazłem taką funkcję:
Screen.PixelsPerInch;
Zwraca ile pixeli to 1 cal;
A co do tego:
dpi = px / cal
te pixele to rozdzielczość ekranu(szerokość? wysokość?)?
Berus123 napisał(a)
te pixele to rozdzielczość ekranu(szerokość? wysokość?)?
to po prostu rozdzielczość, czegokolwiek - ekranu, drukarki, skanera, ...
Mam tu taką funkcję która zwraca ile pixeli to mm:
var
h:HDC;
hres,vres,hsiz,vsiz:integer;
x,y : single;
begin
h:=screen.PrimaryMonitor.Handle;
hres := GetDeviceCaps(h,HORZRES);
vres := GetDeviceCaps(h,VERTRES);
hsiz := GetDeviceCaps(h,HORZSIZE);
vsiz := GetDeviceCaps(h,VERTSIZE);
x := hres/hsiz;
y := vres/vsiz;
end;
Wywala mi błąd invalid floating point operation.
Gdzie popełniłem błąd?
a nie masz hres lub vres = 0 :>
Mam błąd. po prostu nie pobiera wartości. Wszystkie są równe 0. Czy jest inny <ort>sposub </ort>pobrania uchwytu do ekranu?
Misiekd napisał(a)
Berus123 napisał(a)
Ile Pixeli to Milimetr?
zależy przy jakim DPI
dpi = px / cal
cal = px / dpi
1cal = 25,4mm
1 mm = 1/25,4 cala
mm = (px * 25,4) / dpi
px = (mm * dpi) / 25,4jak gdzieś nie zrobiłem błędu to masz
no tak Misiekd, ale nawet jak mysz ma 2000dpi, to w ustawieniach windowsa może być "wolne poruszanie wskaźnikiem" i co wtedy?
- widzisz datę ostatniego postu?
- a co mnie jakieś ustawienia myszy obchodzą?
btw co w ogóle to pytanie tu robi?
Misiekd napisał(a)
Berus123 napisał(a)
Ile Pixeli to Milimetr?
zależy przy jakim DPI
dpi = px / cal
cal = px / dpi
1cal = 25,4mm
1 mm = 1/25,4 cala
mm = (px * 25,4) / dpi /* ( blad w przeksztalceniach 1mm = px/(dpi*255) w staw za cal mm i podziel zebys mial 1 mm [255mm = px/dpi]) ale to tak na marginesie */px = (mm * dpi) / 25,4
jak gdzieś nie zrobiłem błędu to masz
na pewno?
jak dla mnie to inaczej troszkę
dpi to jest ilość punktów (pixeli) w c* 2 (c*- cal; 2-do kwadratu) czyli cal to nic innego jak zagęszczenie na ilość pixeli
dla przykładu:
300 dpi czyli 300 pixeli na c*^2
300 px jest w c*^2 (dla 300 dpi)
zakładając dla 1 cala
300 px jest w 300 / wlaśnie ten 1 c*
300px = 300dpi/1c* podzielcie przez 300 i macie wzor
px=dpi/c*
po przeniesieniu:
1c* = dpi / px raczej :) z tego dalej można rozpisać:
1c* = 255 mm
255mm = dpi/px
1mm = dpi/px * 255
itd itd :)
co do myszki. ilość dpi w myszce oznacza jej czułość (ilość punktów w c*^2 )im więcej tym mysz jest dokładniejsza :) a nie szybsza :)
// mam rację ? :)
Kebab, odpowiem Ci krótko. <font size="6">Sierpień 2006.</span>
Nekrofile ciągle w sile [rotfl]
Chyba sobie to wrzucę do sygnaturki :d
KeBab napisał(a)
// mam rację ? :)
nie