Изображение в приложении WPF отображается меньше, чем при просмотре во внешнем средстве просмотра

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

Вы определили функцию calcweeklywages дважды в своем коде. Когда на самом деле это должно быть определено только один раз. Если вы хотите использовать код, вы называете его так, как вы это делали в программе main(). Эта функция работает одинаково для обоих ваших работников, поэтому для получения разной еженедельной заработной платы вы должны получать разную заработную плату. Но как вы связываете их соответствующую заработную плату с их именами (или некоторым их представлением в вашем коде)?

Это хороший пример использования объектно-ориентированного программирования. Краткий и интересный праймер здесь здесь . Что касается кода, он будет выглядеть следующим образом:

class Employee:
    def __init__(self, Name, Wage = 0, Hours = 0):
        self.Name = Name
        self.Wage = Wage
        self.Hours = Hours

def calcweeklywages(Employee, totalhours):
    '''Return the total weekly wages for a worker working totalHours,
    with a given regular hourlyWage.  Include overtime for hours over 40.
    '''
    hourlywage = Employee.Wage
    if totalhours <= 40:
        totalwages = hourlywage * totalhours
    else:
        overtime = totalhours - 40
        totalwages = hourlywage * 40 + (1.5 * hourlywage) * overtime
    return totalwages

# In your main body, you just test the functionality
EmployeeList = []
EmployeeList.append(Employee("Anne", 34))
EmployeeList.append(Employee("Johnathan", 30))

while(True):
    action = input('Exit? (y/n): ')
    if(action == 'y'):
        break
    else:
        name = input('Enter the employee\'s name: ')
        for Employee in EmployeeList:
            if(Employee.Name == name):
                Person = Employee
        hours = int(input('Enter the number of hours worked: '))
        print('Wages for', hours, 'hours at', Person.Wage,'per hour is', calcweeklywages(Person, hours))

РЕДАКТИРОВАТЬ: я извиняюсь, я забыл об административной части. Но вот,

class Employee:
    def __init__(self, Name, Wage = 0, Hours = 0, Admin = False, code = ''):
        self.Name = Name
        self.Wage = Wage
        self.Hours = Hours
        self.Admin = Admin
        self.code = code

def calcweeklywages(Employee, totalhours):
    '''Return the total weekly wages for a worker working totalHours,
    with a given regular hourlyWage.  Include overtime for hours over 40.
    '''
    hourlywage = Employee.Wage
    if totalhours <= 40:
        totalwages = hourlywage * totalhours
    else:
        overtime = totalhours - 40
        totalwages = hourlywage * 40 + (1.5 * hourlywage) * overtime
    return totalwages

# In your main body, you just test the functionality
EmployeeList = []
EmployeeList.append(Employee("Anne", 34))
EmployeeList.append(Employee("Johnathan", 30))
EmployeeList.append(Employee("Mr. Admin", 50, 0, True, 'Open Sesame'))
while(True):
    action = int(input('Enter action :\n 1. Exit.\n 2. Add new employee.\n 3. Compute weekly wage\n'))
    if(action == 1):
        break
    elif(action == 2):
        AdminName = input('Enter operator name : ')
        Flag = False
        for EmployeeInst in EmployeeList:
            if((EmployeeInst.Name == AdminName) & (EmployeeInst.Admin)):
                code = input('Enter code :')
                if(code != EmployeeInst.code):
                    break
                NewName = input('New Employee name? :')
                NewWage = int(input('New employee wage? :'))
                EmployeeList.append(Employee(NewName, NewWage))
                Flag = True
        if(not Flag):
            print('Wrong Credentials')
            break
    elif(action == 3):
        name = input('Enter the employee\'s name: ')
        for Employee in EmployeeList:
            if(Employee.Name == name):
                Person = Employee
        hours = int(input('Enter the number of hours worked: '))
        print('Wages for', hours, 'hours at', Person.Wage,'per hour is', calcweeklywages(Person, hours))
    else:
        print('Input out of range')
        break

Но опять же, сеанс не является постоянным между различными запусками ядра. Здесь нет настоящей «безопасности», это всего лишь исследование объектно-ориентированного кода Python. Пожалуйста, не используйте это для каких-либо реальных приложений. Существует много всего, что связано со всем этим. Вы должны хранить его в защищенном файле, иметь некоторый интерфейс GUI и т. Д. И т. Д. Есть гораздо более умные пользователи, которые помогут вам внедрить систему в целом. Всего наилучшего в учебе. Приветствия.

7
задан Dave Clemmer 29 July 2011 в 00:39
поделиться

3 ответа

Используйте DPI 96. WPF масштабирует Ваше изображение на основе размера в дюймах, в то время как программа просмотра изображений отображает пиксели. В большинстве систем Windows разрешением экрана, как предполагается, являются 96 DPI, таким образом использование этого в Вашем изображении приведет к непосредственному переводу.

4
ответ дан 6 December 2019 в 11:53
поделиться

Это - результат самого .jpg файла, указывающего DPI - WPF просто повинуется. Вот сообщение форума, детализирующее проблему с некоторыми решениями:

1
ответ дан 6 December 2019 в 11:53
поделиться

Спасибо Mark! Я сделал некоторый поиск с помощью Google на основе Вашей информации и нашел эту статью, которая предоставила решение для получения результата, который я хотел. Это начинает иметь смысл теперь...

Править: Linkrot. Вставка критического текста от статьи здесь для ссылки....

<Image Source=”{Binding …}”
       Stretch=”Uniform”
       Width=”{Binding Source.PixelWidth,RelativeSource={RelativeSource Self}}”
       Height=”{Binding Source.PixelHeight,RelativeSource={RelativeSource Self}}” />

Здесь мы установили Фрагмент на Универсальную форму и связали Ширину и Высоту к PixelWidth и> PixelHeight Источника, эффективно игнорируя DPI. Изображение однако не будет пикселем> прекрасный, даже когда с помощью SnapToDevicePixels (который просто привязывает границы, не пиксели> в рамках изображения). Однако WPF в 3,5 SP1 будет поддерживать NearestNeighbor> BitmapScalingMode, который должен исправить это.

9
ответ дан 6 December 2019 в 11:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: