2015-03-29 4 views
1

Я пытаюсь написать функцию, которая будет вводить проиндексированное изображение в качестве ввода и будет заменять все его пиксели символами или символами.Заменить пиксели символами

Изображение стоит более 1000 слов: это желаемый результат вывода. Каждый из символов представляет собой уникальное значение цвета изображения.

enter image description here

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

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

function drawChars (img) 
if nargin==0 
    load mandrill 
    img=X(1:4:end,1:4:end); 
end 


chars=randperm(numel(unique(img))); 

[h,w]=size(img); 
% Form a grid 
figure 
hold on 
for ii=0:h 
    plot([ii ii],[0 w],'k'); 
end 
for ii=0:w 
    plot([0 h],[ii ii],'k'); 
end 
axis equal; 
axis([0 h 0 w]) 

%% This does not work as expected 
for ii=1:h 
    for jj=1:w 
     text(ii, jj, char(chars(img(ii,jj))), 'fontname', 'Wingdings', 'fontsize',10); 
    end 
end 

end 

Короткий вопрос: Какой подход вы использовали бы для решения проблемы?

Примечание: существует проблема с выбором символов также, но игнорировать его на некоторое время (если символ {выбран не работает хорошо)

+0

Какой ваш желаемый результат? Растровая/Векторная графика? – knedlsepp

+0

@knedlsepp Хорошая точка. Да, например. На самом деле все, что может быть позже напечатано. Кроме того, было бы неплохо, если бы я мог вручную разбить его на части. Вот почему я начал с этого подхода, поэтому я мог масштабировать, насколько мне было угодно, и сохранить его. –

+2

Я предполагаю, что самым простым подходом было бы использование моноширинного шрифта и просто вывод строки, как в [ASCII art] (http://en.wikipedia.org/wiki/ASCII_art). – knedlsepp

ответ

0

С figure изменен f=figure

r=size(img).*16; 
set(f,'paperunits','points') 
set(f,'papersize',r) 
set(f,'paperposition',[0 0 r]); 
print(f,'example.png','-dpng'); 

Распечатывает созданную фигуру до размера достаточного размера.

+0

Это хорошо, но работайте, если у вас уже есть фигура, и вы хотите ее застроить. Тем не менее, моя проблема больше связана с назначением эстетически правильно (например, середины символа с центром в середине пикселя) символом для пикселя. «Как работает текст», возможно, для получения хорошего изображения мне нужен другой подход. Но спасибо за этот хороший кусок кода! –

Смежные вопросы