QNX (画面解像度相互依存設計) を使用して GUI 開発を行っています。c で画面解像度を取得するにはどうすればよいですか。QNX オペレーティング システムを使用しています。出来ますか?このソリューションの OS 機能はありますか?
ありがとう
QNX (画面解像度相互依存設計) を使用して GUI 開発を行っています。c で画面解像度を取得するにはどうすればよいですか。QNX オペレーティング システムを使用しています。出来ますか?このソリューションの OS 機能はありますか?
ありがとう
フレームバッファを備えたデバイスを使用している(そしてルートアクセス権がある)と仮定します:(この回答から取得:Linux FrameBufferを介してピクセルを画面にペイントします)
また、前述のように、使用しているグラフィックス ライブラリによって大きな違いが生じます。このコードは、GUI コードが使用しているものではなく、フレーム バッファが何に設定されているかを示すだけだからです。そのため、まったく役に立たない可能性があります。X やその他のグラフィック ライブラリを使用していない場合は、おそらくフレーム バッファを使用する必要があります。その方法については、残りの回答を参照してください。(DirectFB を使用することを強くお勧めします。これにより、多くのコードを実装する必要がなくなります)。
また、ほとんどのデバイス (組み込みデバイスを含む) で起動する gl ドライバーを使用することもできるため、必要なことを実行する方法にも影響します。
SOCを使用していますか?メーカーには独自のドライバーレイヤーがありますか? それはまったく異なる動作をする可能性があり、おそらくこれを処理するための独自の API が付属しています。
とにかく、これが役立つことを願っています。
#include <stdlib.h>
#include <unistd.h>
#include <stdio.h>
#include <fcntl.h>
#include <linux/fb.h>
#include <sys/mman.h>
#include <sys/ioctl.h>
int main()
{
int fbfd = 0;
struct fb_var_screeninfo vinfo;
struct fb_fix_screeninfo finfo;
long int screensize = 0;
char *fbp = 0;
int x = 0, y = 0;
long int location = 0;
// Open the file for reading and writing
fbfd = open("/dev/fb0", O_RDWR);
if (fbfd == -1) {
perror("Error: cannot open framebuffer device");
exit(1);
}
printf("The framebuffer device was opened successfully.\n");
// Get fixed screen information
if (ioctl(fbfd, FBIOGET_FSCREENINFO, &finfo) == -1) {
perror("Error reading fixed information");
exit(2);
}
// Get variable screen information
if (ioctl(fbfd, FBIOGET_VSCREENINFO, &vinfo) == -1) {
perror("Error reading variable information");
exit(3);
}
printf("%dx%d, %dbpp\n", vinfo.xres, vinfo.yres, vinfo.bits_per_pixel);
// Figure out the size of the screen in bytes
//
close(fbfd);
}