Адаптировать Resize (менее удобный) для CS50 к Resize (более удобный)? - PullRequest
1 голос
/ 11 октября 2019

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

Без публикации моего кода (не уверен, сможем ли мы сделать это здесь или нет), псевдокод для основной части изменения размера был примерно таким:

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 раза, поэтому я предполагаю, что мне нужно знать, что такое округленная шкала, прежде чем идти в петли. Я даже не могу начать думать об уменьшении чего-то таким образом ... Возможно, мне придется пропустить определенные пиксели в цикле, чтобы сделать это? Похоже, совершенно другой механизм, который может испортить полученное изображение.

В любом случае, любая помощь приветствуется!

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