Sergey Alexandrovich Kryukov
Этот код легко проверить под отладчиком. Вы всегда должны использовать отладчик именно в таких случаях. Вы можете сравнить имя файла, которое вы рассчитали, с тем, что вы ожидаете. Если вы видите разницу и не понимаете вас, это будет хороший правильный вопрос для CodeProject.
Две рекомендации для вас:
Наиболее универсальным способом вычисления исполняемого каталога является следующий:
string exePath =
System.IO.Path.GetDirectoryName(
System.Reflection.Assembly.GetEntryAssembly().Location));
Пожалуйста, попробуйте. Некоторые другие методы зависят от того, где вы размещаете код: в приложении, службе, узле среды выполнения Visual Studio и т. д.
Теперь, когда вы помещаете свой образ в исполняемый каталог, это означает, что вы используете его только для чтения.
Я предлагаю вам вместо этого использовать ресурсы.Не добавляйте изображения в свой каталог. Создайте ресурс .resx. Отредактируйте его, используя «Добавить ресурс» => «Добавить существующий файл». Добавьте файл. Если файл не находился в том же каталоге, что и файл ресурсов, он будет скопирован туда, поэтому будьте осторожны, чтобы не хранить несколько копий одного и того же файла. Также этот файл будет добавлен в структуру проекта, а его ссылка будет добавлена в ваш ресурс. Откройте свойство узла проекта, представляющего ваш файл изображения. Вы увидите, что это не должно быть скопировано на выходе сборки. Это будут места в ресурсе, встроенном в ваш исполняемый файл. Вы увидите этот автоматически сгенерированный файл кода Visual Studio в дочернем узле узла, представляющего файл ресурсов. Откройте этот файл и найдите статический класс и его статическое свойство с именем, напоминающим имя вашего файла изображения, который вы использовали при вводе. Используйте это свойство для доступа к ресурсу; не используйте диспетчер ресурсов и строковое имя ресурса - это не совсем поддерживаемый способ.
Используйте собственность. Если, например, ваш файл изображения имеет формат PNG, то свойство будет иметь тип
System.Drawing.Bitmap
Вам не нужно будет сопоставлять имя ресурса, читать данные изображения из потока ресурсов и т. д. Просто используйте экземпляр bitmap.
Еще одно преимущество: он защитит ваши изображения от модификации пользователем. Если вы также подпишете свою сборку, это сделает модификацию ваших изображений почти невозможной.
—СА