Генерация шахматного рисунка определенного размера при печати - PullRequest
0 голосов
/ 07 ноября 2018

Я пытался сгенерировать рисунок шахматной доски в MATLAB таким образом, чтобы при печати на бумаге размером с американскую букву ширина каждой коробки составляла 30 мм.

Я пытался изменить различные свойства gcf, такие как 'Units' и 'PaperSize' и т. Д., Но PDF не распечатывается должным образом.

Я наткнулся на несколько других онлайн-методов, чтобы сгенерировать то, что мне нужно, но я бы хотел сгенерировать один в MATLAB. Есть идеи? Ниже приведен пример кода.

width = 30;
I = checkerboard(width,5,4);
I = I>0.5;
imshow(I);
saveas(gcf,'checkerboard.pdf')

Ответы [ 2 ]

0 голосов
/ 07 ноября 2018

Существуют свойства рисунка, начинающиеся с 'Paper', которые определяют размер и расположение рисунка на бумаге при печати (в PDF или на принтер). Вот список всех свойств фигуры . Эти свойства находятся под заголовком «Печать и экспорт» (см. Таблицу содержимого на левой панели).

Мы можем использовать эти свойства следующим образом. Обратите внимание, что нам не важен размер фигуры на экране, поэтому мы оставляем размер по умолчанию. Мы устанавливаем свойство 'PaperPosition', чтобы при печати фигура имела определенный размер. Затем мы создаем рисунок в шахматном порядке, который заполняет фигуру. Таким образом, рисунок будет иметь размер самой фигуры при печати. ​​

Обратите внимание, как мы устанавливаем свойство 'PaperSize' в дюймах (8,5 "x 11" - это буква США), но свойство 'PaperPosition' в сантиметрах (чтобы можно было легко вычислять квадраты 3x3 см для рисования).

Сам рисунок, вероятно, можно упростить, но это работает. Гораздо эффективнее нарисовать шаблон с использованием заплаток (то есть создать векторный рисунок), чем использовать изображение (то есть функцию checkerboard в OP) при печати в PDF. Выход получше, а файл меньше. Но то же самое можно сделать, отображая изображение.

% Grid size (number of squares)
m = 6; n = 8;
% Square size (in centimeters)
side = 3;
% Create figure and set sizes for printing
figh = figure;
set(figh,'PaperUnits','inches','PaperSize',[8.5 11]);
set(figh,'PaperUnits','centimeters','PaperPosition',[1,1,side*m,side*n]);
% Create axes that fill the figure
axh = axes('Parent',figh,'Units','normalized','Position',[0,0,1,1]);
set(axh,'Color',[1,1,1])
set(axh.XAxis,'Visible','off');
set(axh.YAxis,'Visible','off');
% Draw rectangles
set(axh,'XLim',[0,m],'YLim',[0,n]);
for ii=0:m
   for jj=0:n
      if mod(ii+jj,2)==0
         rectangle('Position',[ii,jj,1,1],'FaceColor',[0,0,0],'LineStyle','none');
      end
   end
end
% Print to PDF
print(figh,'-dpdf','checkerboard.pdf')
0 голосов
/ 07 ноября 2018

Matlab может генерировать ширину только на основе пикселей, поскольку Matlab не знает физических размеров вашего экрана.

Один из способов - найти пикселей на дюйм (PPI) вашего экрана. Вот веб-сайт для расчета PPI по размеру и разрешению экрана. Затем мы можем вычислить width (пиксель для 30 мм) = PPI * 1.1811. (1,1811 дюйма равно 30 мм)

Пример, для экрана PPI = 220 (15,4 дюйма, 2880 * 1800), width=220*1.1811=260.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...