HTML5-Leinwandstrich () dick und unscharf

Lesezeit: 3 Minuten

Benutzer-Avatar
Nona Urbiz

Ich versuche, dem Benutzer zu ermöglichen, ein Rechteck auf der Leinwand zu zeichnen (wie ein Auswahlfeld). Ich bekomme einige lächerliche Ergebnisse, aber dann ist mir aufgefallen, dass ich sogar nur den Code aus meiner Referenz ausprobiert habe hierIch bekomme riesige unscharfe Linien und weiß nicht warum.

es wird gehostet bei dylanstestserver.com/drawcss. Das Javascript ist inline, so dass Sie es überprüfen können. Ich verwende jQuery, um das Abrufen der Mauskoordinaten zu vereinfachen.

  • der Link ist tot.

    – John-Jones

    11. Juni 2014 um 15:27 Uhr

  • Ich bekam auch eine dicke und verschwommene Ausgabe, ich habe Breite und Höhe in % oder vw oder vh eingestellt. Indem ich direkt px auf Breite und Höhe setzte, funktionierte es in meinem Fall.

    – Sarju

    22. Oktober 2016 um 9:55 Uhr

Das unscharfe Problem tritt auf, wenn Sie CSS verwenden, um die Leinwandhöhe und -breite festzulegen, anstatt Höhe und Breite im Leinwandelement festzulegen.

<style>
  canvas { height: 800px; width: 1200px; }      WRONG WAY -- BLURRY LINES
</style>

<canvas height="800" width="1200"></canvas>     RIGHT WAY -- SHARP LINES

Aus irgendeinem Grund ist Ihre Leinwand gedehnt. Weil Sie seine CSS-Eigenschaft haben width einstellen 100%, es dehnt es von einer Art nativer Größe aus. Es ist der Unterschied zwischen der Verwendung von css width Eigentum und die width Attribut auf der <canvas> Schild. Vielleicht möchten Sie versuchen, ein wenig Javascript zu verwenden, damit es das Ansichtsfenster ausfüllt (siehe jQuery .width()):

jQuery(document).ready(function(){
    var canvas = document.getElementById('drawing');
    canvas.width(($(window).width()).height($(window).height());
    var context = canvas.getContext('2d');
    //...

  • Dieser Kommentar hat mir wirklich geholfen, aber es gibt ein paar Fehler. Dies ist die Version des Codes, die für mich funktioniert hat. Da Sie getElementById verwendet haben, gibt es keine .width()- oder height()-Funktion. var canvas = document.getElementById('drawing'); canvas.width = parent.width(); canvas.height = parent.height();

    – Brent Waggoner

    18. Juni 2015 um 2:11 Uhr


Ich setze das Canvas-Element im CSS auf eine Breite und Höhe und setze dann canvas.width = canvas.clientWidth und canvas.height = canvas.clientHeight

var canvas =  document.getElementById("myCanvas");
canvas.width = canvas.clientWidth;
canvas.height = canvas.clientHeight;
var context = canvas.getContext("2d");

  • Dies ist eine gute Option, da Sie die Größe in CSS festlegen können, wo sie natürlich hingehört, IMO.

    – Ctorx

    5. April 2017 um 22:44 Uhr

  • Und wo es flexible Möglichkeiten gibt, wie vw und vh anzugeben.

    – trss

    24. Oktober 2020 um 11:44 Uhr

Sie haben die Leinwandgröße nicht in Pixeln angegeben, daher wird sie vergrößert. Hier ist es 300 x 150. Versuchen Sie, die Breite und Höhe einzustellen

Auf Retina-Displays müssen Sie (zusätzlich zur akzeptierten Antwort) auch skalieren:

var context = canvas.getContext('2d');
context.scale(2,2);

  • Dadurch werden die Abmessungen der Leinwand erhöht.

    – Praveen

    14. August 2014 um 12:21 Uhr

Benutzer-Avatar
Scott Antipa

Das in diesen Kommentaren erwähnte CSS-Größenproblem ist korrekt, aber eine weitere subtilere Sache, die zu unscharfen Linien führen kann, ist das Vergessen, einen Anruf zu tätigen context.beginPath() vor dem Zeichnen einer Linie. Ohne dies aufzurufen, erhalten Sie immer noch eine Linie, aber sie wird nicht geglättet, wodurch die Linie wie eine Reihe von Schritten aussieht.

  • Dadurch werden die Abmessungen der Leinwand erhöht.

    – Praveen

    14. August 2014 um 12:21 Uhr

Benutzer-Avatar
Fidschit

Ich fand heraus, dass meins verschwommen war, weil es eine leichte Diskrepanz zwischen der Inline-Breite und der CSS-Breite gab.

Ich habe meiner Leinwand sowohl Inline-Breite/Höhe-Parameter als auch CSS-Breite/Höhe zugewiesen, weil ich ihre physischen Abmessungen statisch halten muss, während ich ihre Inline-Abmessungen für Retina-Bildschirme erhöhe.

Überprüfen Sie, ob Ihre gleich sind, wenn Sie eine Situation wie meine haben.

1116010cookie-checkHTML5-Leinwandstrich () dick und unscharf

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy