Pracuję nad projektem migracji, w którym baza danych faktycznie przechowuje rozmiary wyświetlania w twipach. Ponieważ nie mogę używać twindów do przypisywania rozmiarów do formantów WPF lub WinForms, zastanawiałem się, czy .NET ma metodę konwersji użyteczną w środowisku wykonawczym?Jak przekonwertować Twips na piksele w .NET?
Odpowiedz
Okazuje się, że narzędzie migracji ma coś, ale nie przyniesie żadnego pożytku w czasie wykonywania. Oto, co zrobiłem (jeśli zmieniona na stałe wartość w metodzie rozszerzenia została zmieniona na wartość punktów na cal, to również działa jako konwerter punktowy):
1 Twip = 1/1440th of inch. Obiekt .NET Graphics
ma metodę DpiX
i DpiY
, której można użyć do określenia liczby pikseli w calach. Stosując te pomiary stworzyłem następujące metody rozszerzenie dla Graphics
:
using System.Drawing;
static class Extensions
{
/// <summary>
/// Converts an integer value in twips to the corresponding integer value
/// in pixels on the x-axis.
/// </summary>
/// <param name="source">The Graphics context to use</param>
/// <param name="inTwips">The number of twips to be converted</param>
/// <returns>The number of pixels in that many twips</returns>
public static int ConvertTwipsToXPixels(this Graphics source, int twips)
{
return (int)(((double)twips) * (1.0/1440.0) * source.DpiX);
}
/// <summary>
/// Converts an integer value in twips to the corresponding integer value
/// in pixels on the y-axis.
/// </summary>
/// <param name="source">The Graphics context to use</param>
/// <param name="inTwips">The number of twips to be converted</param>
/// <returns>The number of pixels in that many twips</returns>
public static int ConvertTwipsToYPixels(this Graphics source, int twips)
{
return (int)(((double)twips) * (1.0/1440.0) * source.DpiY);
}
}
Aby korzystać z tych metod jeden po prostu musi wykonać następujące czynności (zakładając, że jesteś w sytuacji, w której CreateGraphics
zwraca Drawing.Graphics
obiekt (tu this
jest formularz, tak CreateGraphics
jest dziedziczona z Form
„s super-klasy Control
): sekcji
using(Graphics g = CreateGraphics())
{
Width = g.ConvertTwipsToXPixels(sizeInTwips);
Height = g.ConvertTwipsToYPixels(sizeInTwips);
}
Patrz«Uwagi»w Graphics
Class documentation o listę sposobów, aby uzyskać wykres Obiekt ics. Bardziej kompletna dokumentacja jest dostępna w tutorialu How to: Create Graphics Objects.
Krótkie podsumowanie najprostszych sposobów:
Control.CreateGraphics
- zdarzenie farby
PaintEventArgs
maGraphics
dostępny wGraphics
nieruchomości. - Ręka
Graphics.FromImage
obraz i zwróci obiektGraphics
, który może rysować na tym obrazie. (UWAGA: Jest mało prawdopodobne, że będziesz chciał użyć twipów do rzeczywistego obrazu)
dostał mały błąd w kodzie. W ConvertTwipsToYPixles, masz to za pomocą DipX zamiast DpiY – Wesley
@downvoter ??? Chcesz wyjaśnić? – Crisfole
dzięki, mam kolejne pytanie. Powiedziałeś, że CreateGraphics zwraca obiekt Drawing.Graphics. Jaki rodzaj grafiki wraca? Czy mógłbyś podać przykład metody CreateGraphics? –
Dla porównania, inna wersja C#, używając API Win32 zamiast wymagających Graphics
obiekty:
using System.Runtime.InteropServices;
static class SomeUtils {
public static int ConvertTwipsToPixels(int twips, MeasureDirection direction) {
return (int)(((double)twips)*((double)GetPixperinch(direction))/1440.0);
}
public static int ConvertPixelsToTwips(int pixels, MeasureDirection direction) {
return (int)((((double)pixels)*1440.0)/((double)GetPixperinch(direction)));
}
public static int GetPPI(MeasureDirection direction) {
int ppi;
IntPtr dc = GetDC(IntPtr.Zero);
if (direction == MeasureDirection.Horizontal)
ppi = GetDeviceCaps(dc, 88); //DEVICECAP LOGPIXELSX
else
ppi = GetDeviceCaps(dc, 90); //DEVICECAP LOGPIXELSY
ReleaseDC(IntPtr.Zero, dc);
return ppi;
}
[DllImport("user32.dll")]
static extern IntPtr GetDC(IntPtr hWnd);
[DllImport("user32.dll")]
static extern bool ReleaseDC(IntPtr hWnd, IntPtr hDC);
[DllImport("gdi32.dll")]
static extern int GetDeviceCaps(IntPtr hdc, int devCap);
}
public enum MeasureDirection {
Horizontal,
Vertical
}
Należy podać wartość MeasureDirection
, ponieważ nie ma gwarancji, że piksele są zawsze kwadratowe (zgodnie z kb).
referencyjny: kb210590: ACC2000: How to Convert Twips to Pixels
+1 za bezksięgowy sposób na zrobienie tego. – Crisfole
przypadku projektów migracyjnych możemy użyć wbudowanych funkcji wsparcia converstion
microsoft.visualbasic.compatibility.vb6.twipsperpixelx
microsoft.visualbasic.compatibility.vb6.twipsperpixely
Stary post wiem, ale tutaj jest FYI, a niektóre matematyki na 1440 odpowiedzi powyżej ...
Twip to nie tylko 1/1440
th of a inch. Twip to 1/20
z punkt.
Punkt pracy z dokumentem w druku, zazwyczaj jest dopisek:
72dpi. 72dpi * 20Twips/Point = 1440twips
.
W związku z powiedzmy raport Crystal, z szerokością przekątnych 15840
(i marginesami 0 twips), szerokość będzie wynosić 11 inches (15840/(72 * 20))
.
podstawie gęstości ekranu 96 dpi, raport będzie pisać na ekranie w:
1056px wide (96dpi * 11in = 1056px)
.
tylko dla wszystkich informacji, które korzystają z Infragistics Jeden cal to 1,440 twipów (20 punktów na pulpicie). Jeden cal to 72 punkty na pulpicie. Źródło: http://help.infragistics.com/Help/Doc/WinForms/2016.1/CLR4.0/html/Infragistics4.Documents.IO.v16.1~Infragistics.Documents.Word.WordDocumentWriter~ConvertUnits.html – Syed
- 1. Jak przekonwertować wysokość elementu podanego w vh na piksele?
- 2. Jak przekonwertować piksele get.rgb (x, y) na kolor (r, g, b, a) w Javie?
- 3. Jak przekonwertować DateTime typu DateTimeKind.Unspecified na DateTime.Kind.Utc w C# (.NET)
- 4. Jak przekonwertować wartość ASCII na znak w .NET
- 5. Jak przekonwertować ciąg na wersję w .net 3.5?
- 6. Jak przekonwertować ciąg na base64 w .NET framework 4
- 7. Android Bitmap: Konwertuj przezroczyste piksele na kolor
- 8. Jak odczytać piksele ekranu?
- 9. Piksele rysunkowe w WPF
- 10. Jak przekonwertować wartość marginesu css na piksele za pomocą zwykłego javascript?
- 11. piksele Direct2D
- 12. .NET: Jak przekonwertować formularz okna na kontrolkę systemu Windows
- 13. Jak przekonwertować IDN na ASCII?
- 14. Jak przekonwertować ListItemCollection na ListItem []?
- 15. Konwertuj piksele na cale i na odwrót w C#
- 16. Java Loop poprzez piksele na obrazie?
- 17. CSS - Procenty lub piksele?
- 18. Java: Czcionki i piksele
- 19. Jak przekonwertować DataTable na IDatareader?
- 20. Jak przekonwertować plik .cs na cmdlet PowerShell?
- 21. Usuń 3 piksele w iOS/WebKit textarea
- 22. TypeError: Nie można przekonwertować Net :: HTTPOK na ciąg
- 23. Jak przekonwertować znak na pełną nazwę Unicode?
- 24. Odejmij piksele od wartości procentowej w SASS?
- 25. Jak przekonwertować wsdl na java?
- 26. Jak przekonwertować SYS_GUID() na varchar?
- 27. Jak przekonwertować int na nsindexpath?
- 28. Jak przekonwertować apklib na aar
- 29. Jak przekonwertować NaN na 0?
- 30. Jak przekonwertować CMSampleBufferRef na NSData
https://www.unitconverters.net/typography/twip-to-pixel-x.htm mówi 1 piksel = 15 twips ==> 1 twips = 1/15 px – Syed