1

QNX (画面解像度相互依存設計) を使用して GUI 開発を行っています。c で画面解像度を取得するにはどうすればよいですか。QNX オペレーティング システムを使用しています。出来ますか?このソリューションの OS 機能はありますか?

ありがとう

4

3 に答える 3

3

フレームバッファを備えたデバイスを使用している(そしてルートアクセス権がある)と仮定します:(この回答から取得: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);
}   
于 2013-05-09T08:52:45.273 に答える