Ile Pixeli to Milimetr?

0

Ile Pixeli to Milimetr?

0

Nie wiem czy to pomoże (z jakiegoś starego faq - linka nie posiadam)

  1. 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".

0
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

0

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ść?)?

0
Berus123 napisał(a)

te pixele to rozdzielczość ekranu(szerokość? wysokość?)?

to po prostu rozdzielczość, czegokolwiek - ekranu, drukarki, skanera, ...

0

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?

0

a nie masz hres lub vres = 0 :>

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?

0
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,4

jak 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?

0
  1. widzisz datę ostatniego postu?
  2. a co mnie jakieś ustawienia myszy obchodzą?

btw co w ogóle to pytanie tu robi?

0
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ę ? :)

0

Kebab, odpowiem Ci krótko. <font size="6">Sierpień 2006.</span>

0

Nekrofile ciągle w sile [rotfl]
Chyba sobie to wrzucę do sygnaturki :d

0
KeBab napisał(a)

// mam rację ? :)
nie

1 użytkowników online, w tym zalogowanych: 0, gości: 1