ultramanhkf 2017-12-25 07:41 采纳率: 0%
浏览 2539
已结题

QT 在 Framebuffer上的字体显示问题

最近做了一个Linux下的 frambuffer驱动,然后移植了qt5和qt4,
为了做一个简单的demo用于验证驱动是好的。
现在的现象是,通过qt在显示ttf字体的时候,感觉渲染非常糟糕,不知道是驱动问题还是配置问题。
下面两个截图,2个图显示的内容一样,唯一的区别是,字体颜色不同。
为了区分ttf显示样式,还同时显示了点阵字体(所谓qpf字体)。
其中,上方法时间字符串为点阵字体;下发的英文为ttf字体。
图1显示的字体颜色为蓝色,可以看到点阵字体显示正常,但是ttf就很奇怪。
图2显示的字体颜色为白色,两者看起来显示都正常,ttf还蛮好看的。
另外,已经经过直接写入fb验证,rgb颜色序列在驱动中是正确的。
图片说明

图片说明

现在搞不清楚 到底哪里有问题。
另外,也直接使用 FreeType2来读取点阵来显示,这个和直接显示点阵字体一样,没什么问题。

  • 写回答

3条回答 默认 最新

  • ultramanhkf 2017-12-25 07:47
    关注

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
     #define IMAGE_WIDTH     128                 
     #define IMAGE_HEIGHT    96
     
    //set to 0 means use internal fp_ops
    static struct fb_ops oledfb_ops ={.owner        = THIS_MODULE,};
    static struct fb_info *oled_fb_info;
     
    int fb_init(void)
    {
        int r;
         
        oled_fb_info=framebuffer_alloc(0, NULL);
         
         
        strcpy(oled_fb_info->fix.id, "OLED-SPI-1.27");
         
        oled_fb_info->fix.smem_len    = IMAGE_WIDTH*IMAGE_HEIGHT*3;
        oled_fb_info->fix.type        = FB_TYPE_PACKED_PIXELS;
        oled_fb_info->fix.visual      = FB_VISUAL_TRUECOLOR;
        oled_fb_info->fix.line_length = IMAGE_WIDTH * 3;
     
        oled_fb_info->var.xres             = IMAGE_WIDTH;
        oled_fb_info->var.yres             = IMAGE_HEIGHT;
        oled_fb_info->var.xres_virtual     = IMAGE_WIDTH;
        oled_fb_info->var.yres_virtual     = IMAGE_HEIGHT;
        oled_fb_info->var.bits_per_pixel   = 24;
         
        oled_fb_info->var.height=19;//mm unit
        oled_fb_info->var.width=26;//mm unit
         
         
        oled_fb_info->var.red.offset       = 16;
        oled_fb_info->var.green.offset     = 8;
        oled_fb_info->var.blue.offset      = 0;
         
        oled_fb_info->var.red.length       = 8;
        oled_fb_info->var.blue.length      = 8;
        oled_fb_info->var.green.length     = 8;
         
         
        oled_fb_info->fbops=&oledfb_ops;
         
        //oled_fb_info->pseudo_palette=colregs;
         
        //this is used fo mmap
        oled_fb_info->fix.smem_start = virt_to_phys(pOledDrv->pFrameBuffer);
        oled_fb_info->screen_base    = pOledDrv->pFrameBuffer;
         
        r=register_framebuffer(oled_fb_info);
     
        printk("register fb :%d\n",r);
         
        printk("fb buffer:%x,(P:%lx)\n",(int)oled_fb_info->screen_base,oled_fb_info->fix.smem_start);
         
        return 0;
    }
    
    
    评论

报告相同问题?

悬赏问题

  • ¥15 将两文件中相同行数行 打印至同一行
  • ¥15 关于#单片机#的问题:c51单片机想做个密码重置按键K13不知道如何去做,用了24c02来存储
  • ¥20 有没有会python的帮帮我😥
  • ¥15 如何修改系统里的设备信息及某某镇某某村如图所示
  • ¥15 变数的长度不一样”。是什么原因呢?如何修改?
  • ¥15 matlab作业不会写
  • ¥15 eclipse mqtt 消息消费问题
  • ¥15 vue2(标签-chrome|关键词-浏览器兼容)
  • ¥15 python网络流自动生成系统 医学领域
  • ¥15 sql查询仓库里都有什么