Centymetry, piksele i takie tam inne

0

Cześć.
Jak przeliczyć centymetry na piksele?
Czy jest jakaś zależność między tym, a rozdzielczością?

0

zależy od rozdzielczości ekranu. Nie robiłem tego nigdy, ale można by obliczyć długość i szerokość monitora z sinusa jego przekątnej to odpowiednio podzielić i przemnożyć. Cal to około 2,5 centymetra więc jakoś dało by się to obliczyć. Tylko skąd wiadomo jaki ktoś ma monitor?

0

A probowales TScreen.PixelsPerInch?

0

A probowales TScreen.PixelsPerInch?

I wtedy będę miał jak widać ilość pikseli w calu tak?
Ale to będzie cal, czy cal kwadratowy?

Bo piszę program, który ma coś drukować(obrazki i tekst). Używam do tego celu Image'a i muszę odpowienio dopasować ilość pikseli.
Podgląd ma być widoczny tak, jak wyjdzie z drukarki.

0

I wtedy będę miał jak widać ilość pikseli w calu tak?
Ale to będzie cal, czy cal kwadratowy?

Bo piszę program, który ma coś drukować(obrazki i tekst). Używam do tego celu Image'a i muszę odpowienio dopasować ilość pikseli.
Podgląd ma być widoczny tak, jak wyjdzie z drukarki.

A to wieksza zabawa. To sa punkty na cal, wiec nie kwadratowy. Oczywiscie z powodu wlasciwosci monitorow nie mozna zmierzyc ekranu linijka i wyciagac wnioskow :) Jesli chodzi o obrazki i drukarke - sprobuj funkcji pixelsperinch w kombinacji z GetDeviceCaps( handle, LOGPIXELSX )/GetDeviceCaps( handle, LOGPIXELSY )

0

Juhas jeśli ogólnie chcesz policzyć cm na pix itd. to taka opcja jest w Corelu. Tam fajnie wszystko oblicza. Ja używam Corel 8 i tam w menu Obrazek -> Zmień rozmiar/rozdzielczość jest taka opcja. Jeśli chcesz wykonać takiego softa to wskazówki masz już podane wyżej :d [browar]

0

Ino w helpie jest napisane, że PixelsPerInch daje mi ilość pikseli na cal, ale tylko pionowo. Bo poziomo różnie monitory mogą mieć inaczej(tak jest w helpie)

A GetDeviceCaps zwraca mi 0.

0

Ino w helpie jest napisane, że PixelsPerInch daje mi ilość pikseli na cal, ale tylko pionowo. Bo poziomo różnie monitory mogą mieć inaczej(tak jest w helpie)

A GetDeviceCaps zwraca mi 0.

Nie wiem, jak sprawdzales - funkcja getdevicecaps( printer.handle, LOGPIXELSX )? U mnie daje poprawne wyniki. Zajrzyj do helpa Win32 SDK, ta funkcja ma sporo parametrow. Jest rowniez temat "Device Independent Bitmaps".

0
Juhas napisał(a)

Cześć.
Jak przeliczyć centymetry na piksele?
Czy jest jakaś zależność między tym, a rozdzielczością?

no wiec

0

ale mieszacie
DPI drukarki jak odczytać masz
DPI ekranu też
1cal = 2,54 cm
1cal = 25,4mm
1mm = 10 / 254 cala
1mm = 10 / 254 * DPI punktów

na ekranie i tak nikt Ci nie będzie liniką sprawdzał, czy jest co do milimetra, podgląd ma dac jedynie mniej więcej jak to będzie wyglądało (chodzi o rozmieszczenie wielkość itp a nie dokładne co do mm wymiary).

0

Hej.

Musze wydrukować na kartce ramke 10cm na 15cm.
Jak to zrobić spod delphi??
Tzn jakie liczby wpisać w: Canvas.Rectangle(10, 10, ??, ??); ??
Jak to obliczyć??

0

no przecież masz wszystko wyżej napisane. Przeczytałeś? To czego nie kumasz??

0
DPI drukarki jak odczytać masz
DPI ekranu też
1cal = 2,54 cm
1cal = 25,4mm
1mm = 10 / 254 cala
1mm = 10 / 254 * DPI punktów

Tego :(.

Coś piszecie o pobieraniu jakiś danych na temat rozdzielczości i DPI drukarki.
Co dokładnie i jak?? Może Macie jakiś gotowiec?? Jakiś kodzik [sciana] .
Byłbym bardzo wdzięczny.

0

ilość pikseli na ekranie i na drukarce będą zazwyczaj inne. Aby policzyć ile ich ma być musisz pobrać DPI (pikseli na cal) drukarki (GetDeviceCaps(Printer.Handle, LOGPIXELSX)) oraz ekranu (Screen.PixelsPerInch). Następnie kożystając ze wzorów, które podał masz, że

1mm = 10 / 254 * DPI - wynik w pikselach

czyli 10 x 15 cm na monitorze to będzie

10cm = 100 * 10 / 254 * Screen.PixelsPerInch;
15cm = 150 * 10 / 254 * Screen.PixelsPerInch;

a na drukarce

10cm = 100 * 10 / 254 * GetDeviceCaps(Printer.Handle, LOGPIXELSX);
15cm = 150 * 10 / 254 * GetDeviceCaps(Printer.Handle, LOGPIXELSY);

zauważ, że drukarki zazwyczaj mają trochę inną liczbę DPI w pionie i w poziomie dlatego dla poziomu jest LOGPIXELSX a dla pionu LOGPIXELSY (albo na odwrót :P). Oczywiście wyniki trzeba albo zaokrąglić albo obciąć cześć ułamkową.

Czy jeszcze czegoś nie rozumiesz?

0

OK. myśle że już wszytsko wyjkaśniło się. Teraz to musze to jakoś wykorzystać, ale to za dnia, bo teraz już ledwo widze.
Dzięki

0

Qrcze, niezbyt to działa.
Napisałeś:

1mm = 10 / 254 * DPI - wynik w pikselach

czyli 10 x 15 cm na monitorze to będzie

10cm = 100 * 10 / 254 * Screen.PixelsPerInch;
15cm = 150 * 10 / 254 * Screen.PixelsPerInch;

Czy u Ciebie tak jest?? Bo u mnie nie :(.

U mnie musi być:

10cm = 100 * 11 / 265 * Screen.PixelsPerInch;
15cm = 150 * 11 / 265 * Screen.PixelsPerInch;

Dla tych wartości jest najbliżej.

A jak chce np 8x7 to znowu inne liczby musze dobierać :(.
Nie da sie tego jakoś zautomatyzować??

0
puchatek007 napisał(a)

Dla tych wartości jest najbliżej.

najbliżej czego?? Czyżbyś mierzył linijką ekran monitora :| :| ??????

0

No a czemu nie?? DPI monitora biore więc ma być co do mm :D

Qrde myśłałem że tak ma być, a jednak nie.
No nic, zobaczymy jak będzie drukował :)

0
puchatek007 napisał(a)

No a czemu nie?? DPI monitora biore więc ma być co do mm :D

Qrde myśłałem że tak ma być, a jednak nie.
No nic, zobaczymy jak będzie drukował :)

to sobie zmierz dwa monitory z kineskopami różnych producentów, a jeszcze lepiej np 15 z 17 to zobaczysz dlaczego tak nie będzie :)

0

No oki, na drukarce ładnie wychodzi ;) Dzięki.

0

Weź sobie wstaw taką funkcję. Wprawdzie uwzględnia ona rozdzielczość drukarki tylko w osi X, ale nigdy nie widziałem drukarek, które mają różne rozdzielczości dla osi X i osi Y.

function MM_na_DPI(mm:single):integer;
var
  a,b:integer;
begin
  a:=GetDeviceCaps(Printer.Handle,LogPixelSX);  // rozdzielczość
  b:=Round(mm*a/25.4);

  Result:=b;
end;

i teraz możesz poprzez funkcję wpisywać milimetry np:

Rectangle(MM_na_DPI(10),  MM_na_DPI(10),  MM_na_DPI(60),  MM_na_DPI(60));

Wydrukowany zostanie kwadrat o boku 50 mm.

0

254 punkty na cal... dla 72 dpi, czy jakoś tak.

w każdym rozom dla czcionek jakoś tak jest...
bo tam są punkty logiczne, nie te ekranowe, np. czcionka 8pts to taka typowa - gazetowa.

0

Proporcje kartki A4 to 1 : scr(2), więc (w teorii) zachowując te proporcje na dowolnej rozdzielczości możesz narysować co chcesz, zapisać do pliku i użyć procedury ShellApi do wydrukowania. Robiłem tak, ale z tekstem i działało, z obrazem nie sprawdzałem.

0

a czy to scr(2) to 1.41?

no to w takim raom musisz skalować x i y niezależnie,
a i czcionki też, bo po obrocie np. o 90 stopni one także będą zjeb*** - sprawdź to sobie...

0

Nie uwazasz @wojmysz1 ze przez prawie DZIESIEC LAT to juz sobie gosc poradzil z tym wydrukiem

0

Nie uwazasz @wojmysz1 ze przez prawie DZIESIEC LAT to juz sobie gosc poradzil z tym wydrukiem

Strasznie nie lubię takich tekstów, jak ten powyżej, bo to świadczy o tym, że piszący nie widzi dalej niż czubek własnego nosa. Owszem, 10 lat to kupa czasu. Ci starzy z pewnością znaleźli odpowiedź na nurtujące ich pytania, ale na ich miejsce pojawiła się setka, a może i tysiące innych, którzy tak samo poszukują odpowiedzi na te same pytania. Ja chciałem im tylko pomóc, nic więcej.

0

Co ty [CIACH!]?? Przeciez pytacz jasno napisal

puchatek007 napisał(a):

No oki, na drukarce ładnie wychodzi ;) Dzięki.

To co ci jeszcze ma napisac?

A co do twojej pomocy to ograniczyla sie ona do wprowadzania w blad

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