低帧速率下的非均匀像素绘制

guicsvcw  于 2022-10-18  发布在  其他
关注(0)|答案(1)|浏览(166)

我正在制作一个图像编辑程序,在制作画笔工具时遇到了一个问题。问题是当帧速率非常低时,因为程序在那个时刻读取鼠标并绘制它下面的像素。我可以使用什么解决方案来解决这个问题?我正在使用IM图形用户界面和OpenGL。
对比一下。

另外,我正在使用此代码更新屏幕上的图像。

UpdateImage() {
    glBindTexture(GL_TEXTURE_2D,this->CurrentImage->texture);
    if (this->CurrentImage->channels == 4) {
        glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, this->CurrentImage->width, this->CurrentImage->height, 0, GL_RGBA, GL_UNSIGNED_BYTE, this->CurrentImage->data);
    }
    else {
        glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, this->CurrentImage->width, this->CurrentImage->height, 0, GL_RGB, GL_UNSIGNED_BYTE, this->CurrentImage->data);
    }
}

和铅笔/画笔的代码

toolPencil(int _MouseImagePositionX, int _MouseImagePositionY) {    
    int index = ((_MouseImagePositionY - 1) * this->CurrentImage.width * this->CurrentImage.channels) + ((_MouseImagePositionX - 1) * this->CurrentImage.channels);
    //Paint the pixel black
    CurrentImage.data[index] = 0;
    CurrentImage.data[index + 1] = 0;
    CurrentImage.data[index + 2] = 0;
    if (CurrentImage.channels == 4) {

        CurrentImage.data[index + 3] = 255;
    }
}
pjngdqdw

pjngdqdw1#

1.在不重新绘制鼠标的情况下对鼠标进行采样...
1.在您可以更改鼠标时重新绘制(取决于您应用程序的fps或架构)

  • 不是直接使用鼠标点,而是将它们用作分段三次曲线控制点

请参阅:

因此,您只需将采样点用作三次曲线控制点,并对缺失的像素进行内插/栅格化。或者按10行对每个线段进行采样(以1.0/10.0为增量参数),或者以足够小的步长对其进行采样,以使每个步长小于像素(基于控制点之间的距离)。

相关问题