Bucket computation, cutting array with lines
For the considered line you know the start position (xs, ys) and the end (xe, ye). For instance on the N=7 visual you provide, let's take the first upper left line:

xs = 0
ys = 4.5
xe = 7
ye = 2.5
(I use coordinates right, down starting from upper left corner).


Let's take a parameter t of the linear position on the line with t=0 on start and t=1 on end. You know how many verticals or horizontals your line crosses and at which t value. In our exemple:


6 verticals crossed at t = v/7 with v=1 to 6 (not counting outlines).
2 horizontal crossed at t = 0.25 and t = 0.75.


Now just sort t increasing all these crossings:

(1/7, V), (0.25, H) (2/7, V), (3/7, V), (4/7, V), (5/7, V), (0.75, H), (6/7, V).


They correspond to cell change starting in cell (1, 5) to cell (7, 3). So you can compute the relative length of the line in each cell. For instance:

cell (1, 5) L = 1/7-0 = 1/7
cell (2, 5) L = 0.25-1/7
...


And you know how to select the X pixels now.