我正在制作一个图像编辑程序,在制作画笔工具时遇到了一个问题。问题是当帧速率非常低时,因为程序在那个时刻读取鼠标并绘制它下面的像素。我可以使用什么解决方案来解决这个问题?我正在使用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;
}
}
1条答案
按热度按时间pjngdqdw1#
1.在不重新绘制鼠标的情况下对鼠标进行采样...
1.在您可以更改鼠标时重新绘制(取决于您应用程序的fps或架构)
请参阅:
因此,您只需将采样点用作三次曲线控制点,并对缺失的像素进行内插/栅格化。或者按10行对每个线段进行采样(以
1.0/10.0
为增量参数),或者以足够小的步长对其进行采样,以使每个步长小于像素(基于控制点之间的距离)。