Я перечитал пару постов с тем же вопросом, но большинство, похоже, пошли о более простой проблеме, чем я, поэтому у меня возникают проблемы с поиском советов о том, как действовать.
Без публикации моего кода (не уверен, сможем ли мы сделать это здесь или нет), псевдокод для основной части изменения размера был примерно таким:
for each scanline
{
for number of times to extend vertically
{
for each pixel in infile
{
read pixel from infile
for number of times to extend horizontally
{
write pixel
}
}
done extending horizontally, add padding to outfile
move cursor to front of line
}
done extending vertically, move to next line by passing padding
}
Возможно, мои вложенные циклы не таковыбыстрый или элегантный, но это был первый логический поезд, который пришел ко мне, и это сработало. Тем не менее, я почти не уверен, как адаптировать это для чисел с плавающей запятой и того факта, что мне нужно сокращать вещи сейчас.
Я знаю, что мне придется сделать какое-то округление. Если у меня есть только один пиксель, и пользователь говорит программе изменить его размер на .5, я все равно дам им один пиксель, потому что я не могу разделить байты, из которых он состоит. Точно так же всякий раз, когда я повышаю масштаб, я, вероятно, всегда даю полные пиксели.
Но с чего мне начать с этой логикой? Как мне решить, что такое «масштаб» и как он будет взаимодействовать с моими петлями? Я не могу зациклить что-то 1,5 раза, поэтому я предполагаю, что мне нужно знать, что такое округленная шкала, прежде чем идти в петли. Я даже не могу начать думать об уменьшении чего-то таким образом ... Возможно, мне придется пропустить определенные пиксели в цикле, чтобы сделать это? Похоже, совершенно другой механизм, который может испортить полученное изображение.
В любом случае, любая помощь приветствуется!