-Ekran kapalı QPainterPaths oluşturma etkin olan ve olmayan OpenGL OpenGL çözüm gerekli)
- Benim uygulamada, sokak harita
widget
QPainter
kullanarak boyaQPainterPaths
tarafından yapılan önceden çizilmiş yolları içeriyorwidget
şu andaQGLWidget
ama bu değişebilir ** 7, Bir bir.
- Resim ekranın dışına taşımak için çalışıyorum ve yığın halinde işleri bölmek
QImage
üzerine her parça boya ve son olarakwidget
üzerine tüm resimler çizmek istiyorumQPainterPaths
zaten sorun bu değil yani yığın halinde- sorun
QImages
çizim hakkında5 kez daha yavaşdahaQWidget
üzerinde çizim
- Bazı değerlendirme testi ben yaptım
- zaman değerleri birden çok çalıştırır yuvarlak ortalamalar
- test kısmını yaklaşık 150 doğrusal çizgi parçaları her biri 100
QPainterPaths
içerir - yaklaşık 15k yolları
QPainter::Antialiasing
render ipucu ile çizilir,QPen
yuvarlak uç kullanır ve yuvarlak katıl
- Benim kaynak
QPainterPaths
(renk ve genişliği; bazı çizgi . unutmayın ^strong>çizilmişbazıdolu)QPainter
destekler çizim tüm diğer türleri ihtiyacım yokQPainterPaths
** 20, bu iyi bir çözüm olurdu bir çizilmiş olabilir başka bir şey dönüştürülebilir.- Köşe verileri için ekran kapalı ve çoğu 2D için değil OpenGL tamponlar, farklı türleri olduğunu biliyorum ama işleme görüntü işleme
OpenGL
aşina değilim.
Paint Device for chunk | Rendering the chunk itself | Painting chunk on QWidget
----------------------- ---------------------------- --------------------------
QImage | 2000 ms | < 10 ms
QPixmap (*) | 250 ms | < 10 ms
QGLFramebufferObj. (*) | 50 ms | < 10 ms
QPicture | 50 ms | 400 ms
----------------------- ---------------------------- --------------------------
none (directly on a QWidget in paintEvent) | 400 ms
---------------------------------------------------- --------------------------
(*) These 2 lines have been added afterwards and are solutions to the problem!
Eğer bana bir anlatsan iyi olurdunon-OpenGL tabanlı bir çözümiki versiyonu benim uygulama derlemek istiyorum olarak da: OpenGL
non-OpenGL
sürüm.
Ayrıca, çözümün bir işlemek için mümkün olmak istiyorumnon-GUI iplik.
İyi bir şekilde verimli bir şekilde parçalar ekran dışı beraberlik var mı?
Off-ekran sayacı QPainter
için boya bir cihaz olarak kullanılabilir QGLWidget
(OpenGL
off-screen buffer) bölümü var mı?
CEVAP
Qt-interest Archive, August 2008 QGLContext::create() belge
diyor ki:
Bir QGLContext geçerli GL boya cihazı ile oluşturulabilir ya bir QGLWidget, QGLPixelBuffer bağlı olması gerekiyor ya da anlamına gelir Oluşturduğunuzda QPixmap. Eğer verecek bir QPixmap kullanırsanız sadece yazılım oluşturma ve bunu istemezsin.Bir QGLFramebufferObject sadece oluşturulabilir kendisi geçerli GL boya bir cihaz, yer değil bir QGLWidget veya QGLPixelBuffer kapsamında. Bunun anlamı nedir sanagerekbir QGLWidget ya da sizin için üs olarak QGLPixelBuffer QGLFramebufferObject.
Belgede belirtildiği gibi, Eğer off-screen buffer opengl kullanarak işlemek istiyorsanız, QGLPixelBuffer gerekir. Aşağıdaki kod OpenGL ile QGLPixelBuffer nasıl kullanılacağını gösteren çok basit bir örnek:
#include <QtGui/QApplication>
#include <Windows.h>
#include <gl/GL.h>
#include <gl/GLU.h>
#include <QtOpenGL/QGLFormat>
#include <QtOpenGL/QGLPixelBuffer>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
// Construct an OpenGL pixel buffer.
QGLPixelBuffer glPixBuf(100, 100);
// Make the QGLContext object bound to pixel buffer the current context
glPixBuf.makeCurrent();
// The opengl commands
glClearColor(1.0, 1.0, 1.0, 0.0);
glViewport(0, 0, 100, 100);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(0, 100, 0, 100);
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(1.0, 0.0, 0.0);
glPointSize(4.0);
glBegin(GL_TRIANGLES);
glVertex2i(10, 10);
glVertex2i(50, 50);
glVertex2i(25, 75);
glEnd();
// At last, the pixel buffer was saved as an image
QImage &pImage = glPixBuf.toImage();
pImage.save(QString::fromLocal8Bit("gl.png"));
return a.exec();
}
Program sonucu bir png resim dosyası olarak:
Olmayan opengl sürüm QPixmap kullanarak, belki de aşağıda biçimleri: kodu
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QPixmap pixmap(100, 100);
QPainter painter;
painter.begin(&pixmap);
painter.drawText(10, 45, QString::fromLocal8Bit("I love American."));
painter.end();
pixmap.save(QString::fromLocal8Bit("pixmap.png"));
return a.exec();
}
Program sonucu yukarıdaki gibi bir png dosyası
Kod basit ama işe yarıyor olsa, belki bazı değişiklikler bunu uygun hale getirmek için ne yapabilirim.
Ve 'Çerçeve arasındaki farklar ka...
Neden OpenGL radyan yerine derece kull...
Örnek OpenGL görüntü işleme görevleri ...
Sürüm 4.1 olarak OpenGL metin işleme-o...
&; Acil modu" quot; OpenGL ne anla...