Mathematica, 166 137 byte
l:={i,j};s=Sign;f[p_,q_,h_,w_]:=Grid@Table[(1-Max[s[p-l]s[q-l],0])Boole[Abs@Mean[s@Det@{p-l+#,p-q}&/@Tuples[.5{1,-1},2]]<.6],{i,h},{j,w}]
Versi yang lebih mudah dibaca:
l := {i, j}; s = Sign;
f[p_, q_, h_, w_] :=
Grid@Table[(1 - Max[s[p - l] s[q - l], 0]) Boole[
Abs@Mean[
s@Det@{p - l + #, p - q} & /@
Tuples[.5 {1, -1}, 2]] < .6], {i, h}, {j, w}]
Ini mendefinisikan fungsi yang disebut f. Saya menginterpretasikan spesifikasi input dan output secara bebas. Fungsi ini fmengambil input dalam format f[{x0, y0}, {x1, y1}, height, width], dan kisi diindeks 1, mulai dari kiri atas. Outputnya seperti

dengan garis ditampilkan sebagai 1s dan latar belakang sebagai 0s (ditampilkan di sini untuk f[{2, 6}, {4, 2}, 5, 7]). Tugas mengubah matriks Mathematica 1s dan 0s menjadi string #s dan .s telah di-golf dalam banyak tantangan lain sebelumnya, jadi saya hanya bisa menggunakan metode standar, tapi saya tidak berpikir itu menambahkan sesuatu yang menarik.
Penjelasan:
Gagasan umum adalah jika garis melewati beberapa piksel, maka setidaknya satu dari empat sudut piksel berada di atas garis, dan setidaknya satu di bawah. Kami memeriksa apakah sudut berada di atas atau di bawah garis dengan memeriksa sudut antara vektor ( {x0,y0}ke sudut) dan ( {x0,y0}ke {x1,y1}): jika sudut ini positif, sudut di atas, dan jika sudut negatif, sudut di bawah.
Jika kita memiliki dua vektor {a1,b1} dan {a2,b2}, kita dapat memeriksa apakah sudut di antara mereka positif atau negatif dengan menemukan tanda penentu matriks {{a1,b1},{a2,b2}}. (Metode lama saya melakukan ini menggunakan aritmatika bilangan kompleks, yang terlalu ... well, kompleks.)
Cara ini bekerja dalam kode adalah sebagai berikut:
{p-l+#,p-q}&/@Tuples[.5{1,-1},2]mendapatkan empat vektor dari {x0,y0}dan empat sudut piksel (dengan l:={i,j}, koordinat piksel, yang ditentukan sebelumnya), dan juga vektor antara {x0,y0}dan {x1,y1}.
s@Det@...menemukan tanda-tanda sudut antara garis dan empat sudut (menggunakan s=Sign). Ini akan sama dengan -1, 0 atau 1.
Abs@Mean[...]<.6memeriksa bahwa beberapa sudut positif dan sebagian negatif. 4-tupel tanda yang memiliki properti ini semuanya memiliki sarana antara -0,5 dan 0,5 (inklusif), jadi kami membandingkan dengan 0,6 untuk menyimpan byte dengan menggunakan <alih-alih <=.
Masih ada masalah: kode ini mengasumsikan bahwa garis memanjang selamanya di kedua arah. Karena itu kita perlu memotong garis dengan mengalikannya dengan 1-Max[s[p-l]s[q-l],0](ditemukan dengan coba-coba), yang berada 1di dalam persegi panjang yang ditentukan oleh titik akhir garis, dan di 0luarnya.

Sisa kode membuat kisi-kisi piksel ini.
(Sebagai bonus, inilah upaya sebelumnya dengan metode yang sama sekali berbeda, untuk 181 byte :)
Quiet@Grid@Table[(1-Max[Sign[{i,j}-#3]Sign[{i,j}-#4],0])Boole[#3==#4=={i,j}||2Abs@Tr[Cross@@Thread@{{i,j},#3,#4}]/Norm[d=#3-#4]<2^.5Cos@Abs[Pi/4-Mod[ArcTan@@d,Pi/2]]],{i,#},{j,#2}]&