Seite 1 von 1

Brush / QPen Sketch Style

Verfasst: 12. Dezember 2013 14:21
von der_burner
Hallo Zusammen,

ich wollte einmal mein Projekt etwas aufhübschen und die Linen im Rect, Eclipse etc. pimpen. Aber das scheint schwerer zu sein als ich dachte!
Irgendwie finde ich dazu nicht wirklich etwas auf Google. Zwei Links habe ich nur gefunden, die das gleiche beschreiben, aber ich verstehe das irgendwie nicht. Mein Ziel ist es das alle Linien aussehen wie im Sketch Style:
http://www.wirify.com/wp/wp-content/upl ... iq-CNN.png

Hier sind die zwei Links die ich gefunden habe, aber wie gesagt ich kann damit irgendwie nicht wirklich was anfangen:
1 http://qt-project.org/forums/viewthread/14991/P15
2 http://qt-project.org/forums/viewthread/18048

Könnt Ihr mir das erklären, oder mir helfen, das zu verstehen. Habt ihr sonsonst noch irgendwo Stoff zu diesem Thema? Ich denke das sollte eigentlich in QT nicht das Problem sein, verschiedene Arten von Linien zu zeichnen.

Vielen Dank

Re: Brush / QPen Sketch Style

Verfasst: 18. Dezember 2013 22:41
von der_burner
Hallo Zusammen,

hat keiner eine Idee?

Viele Grüße

Re: Brush / QPen Sketch Style

Verfasst: 19. Dezember 2013 19:15
von veeman
Es gibt anscheinend keine einfache Methode für dein Vorhaben.

In dem einen Thread wird beschrieben wie man es mit Pixmap bzw mit "Stempeln" realisieren kann,
in dem ein Brush in einer Schleife entlang eines Pfades gemalt/übermalt wird. Dies ist jedoch relativ Rechenintensiv.

Eine andere Methode wäre vielleicht mit Hilfe von OpenGL und einem Sketch-Render das gewünschte von der Grafikkarte übernehmen zu lassen.

Beides würde ich für eine einfache Anwendung jedoch nicht empfehlen.

Re: Brush / QPen Sketch Style

Verfasst: 19. Dezember 2013 22:43
von der_burner
Vielen Dank für deine Antwort.

Ok, hatte jetzt nicht erwartet das so etwas so kompliziert ist.

Wenn ich mir das Beispielt http://www.mrdoob.com/projects/harmony/#ribbon ansehe, kann das sogar JavaScript recht flüssig.

Ok, dann muss ich mir da mal was ausdenken.

Re: Brush / QPen Sketch Style

Verfasst: 20. Dezember 2013 00:04
von veeman
Solange du drauf achtest das dass Zeichnen richtig gemacht wird, ggf mit einem Zwischenpuffer sollte das in Qt ohne Probleme gehen.

Auszug aus dem Code der Verlinkten Seite:

Code: Alles auswählen

sketchy.prototype = {
  context: null,
  prevMouseX: null,
  prevMouseY: null,
  points: null,
  count: null,
  init: function(a) {
    this.context = a;
    this.context.globalCompositeOperation = "source-over";
    this.points = new Array();
    this.count = 0
  },
  destroy: function() {},
  strokeStart: function(b, a) {
    this.prevMouseX = b;
    this.prevMouseY = a
  },
  stroke: function(f, c) {
    var e, b, a, g;
    this.points.push([f, c]);
    this.context.lineWidth = BRUSH_SIZE;
    this.context.strokeStyle = "rgba(" + COLOR[0] + ", " + COLOR[1] + ", " + COLOR[2] + ", " + 0.05 * BRUSH_PRESSURE + ")";
    this.context.beginPath();
    this.context.moveTo(this.prevMouseX, this.prevMouseY);
    this.context.lineTo(f, c);
    this.context.stroke();
    for (e = 0; e < this.points.length; e++) {
      b = this.points[e][0] - this.points[this.count][0];
      a = this.points[e][1] - this.points[this.count][1];
      g = b * b + a * a;
      if (g < 4000 && Math.random() > (g / 2000)) {
        this.context.beginPath();
        this.context.moveTo(this.points[this.count][0] + (b * 0.3), this.points[this.count][1] + (a * 0.3));
        this.context.lineTo(this.points[e][0] - (b * 0.3), this.points[e][1] - (a * 0.3));
        this.context.stroke()
      }
    }
    this.prevMouseX = f;
    this.prevMouseY = c;
    this.count++
  },
  strokeEnd: function() {}
};
Da sieht man, dass jede Mausposition getrackt wird und mittels einer Schleife alle Punkte jedes mal durchlaufen werden und je nach Abstand zum aktuellen Punkt ggf weitere Linie in Richtung der Bereits gezeichneten gemalt werden.

Re: Brush / QPen Sketch Style

Verfasst: 28. Januar 2014 21:04
von der_burner
Ja, ich dachte es wäre nur schön / leichter das über QBrush oder QPen zu lösen. Die Software "Krita" wird ja auch in QT geschrieben und dort sind solche Linien kein Problem. Ich habe mir auch den Quellcode schon gezogen und versucht dort etwas abzulesen, aber das war dann doch zu viel des guten. Da bin ich nicht mehr so einfach durch gestiegen