14. januar 2000 - 13:31Der er
6 kommentarer og 1 løsning
Skærmens bitdybde i windows
Ved hjælp af et API kald kan man på følgende måde sætte en ny windowsopløsning:
procedure SetWinRes(HardMaxX, HardMaxY, HardBPP: DWord); var WinRes : TDeviceMode; begin EnumDisplaySettings(nil, 0, WinRes); WinRes.dmFields:=DM_PELSWIDTH or DM_PELSHEIGHT or DM_BITSPERPEL; WinRes.dmPelsWidth :=HardMaxX; WinRes.dmPelsHeight:=HardMaxY; WinRes.dmBitsPerPel:=HardBPP; ChangeDisplaySettings(WinRes, 0); end;
Dette er jo fint nok, men er der nogen der ved hvordan man læser hvilken farvedybde, bits pr. pixel, windows kører med? Skærmens vidde og bredde kan læses med Screen.Width og Screen.Height men ikke farvedybden.
Du har jo selv skrevet svaret.... i ovenstående eksempel kan du læse farvedybden af den pågældende opløsning i WinRes.dmBitsPerPel (efter kaldet til EnumDisplaySettings(nil, 0, WinRes);)
Det er ikke helt korrekt, michaelras. Det er rigtigt at man i winres.dmbitsperpel kan læse bits pr. pixel, men hvilken af de mulit devicesettings der er den rigtige kan han med ovenstående eksempel ikke være sikker på.
Jeg gør sådan i mione programmer:
først kalder jeg:
procedure getcolorscount; var h : hDC; i : integer; begin try h := getDC(0); i := getdevicecaps(h,planes); cbits := getdevicecaps(h,bitspixel); ccolors := 1 shl (i * cbits); finally releaseDC(0,h); end; end;
og derefter er:
getcolorscount; if ccolors < 2 then begin skm_typ.caption := inttostr(cbits)+ ' bit'; end else begin skm_typ.caption := inttostr(ccolors)+' ('+inttostr(cbits)+ ' bit)'; end;
Dette viser i en label (skm_typ) f.eks: '16777891 (24bit)'
Kaldet til EnumDisplaySettings skal udføres med en værdi stigende med 1 fra 0, indtil den returnerer en 0-værdi. Da der kan være flere end en displaysetting kan man ikke være sikker på hvilken der er benyttet. Kaldet viser KUN DE mulige settings (dem man normalt kan vælge under indstillinger i skærm). Ikke den der er valgt.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.