Я создаю конвертер ASCII в VS2017 в C ++, используя библиотеку SFML.Я считаю, что моя основополагающая логика правильна, и что в синтаксисе вещей не должно быть никаких ошибок, но я несколько новичок в VS и собираю с внешними включениями.
Когда я пытаюсьсборка моей программы для отладки, VS выдает эту ошибку:
Не удалось найти 'FILEPATH \ Debug \ main.obj'.FILENAME был создан с помощью / DEBUG: FASTLINK, для которого требуются файлы объектов для отладки.
Последующие сбои будут регистрироваться на панели «Отладка» окна «Вывод».
Я полагаю, что настроил SFMLправильно - для справки, я следовал этого урока от "Hilze Vonck".
Большинство распространенных решений указывают на то, чтобы убедиться, что ваш выходной файл компоновщика равен $ (OutDir) $ (TargetName)$ (TargetExt).Шахта установлена как таковая.Ни одно из найденных решений не дало никаких результатов.
При некотором редактировании папка моего проекта сохраняется в этом месте:
E: \ Google Drive \ College \XXXXXX XXXX X \ CGT XXX \ CGTXXX_XXXXXXX_XXXXX_Final_Project \ ASCII_Converter
Не уверен, если это что-то изменит, но вы идете.
Что касается файла I 'я пытаюсь собрать, опять же, не уверен, что это полезно для решения проблемы, но вот она:
//CGT *** Final Project: Image to ASCII Converter
//J**** W******
//Pass 01
//Researching into how this would be done led me to believe that including some sort
//of external framework might be the way to go. SFML seemed to be a popular one and
//I'd used it once for a project back at Butler. Might not need it, but research leads
//me to believe it'll be useful.
#include <SFML/Graphics.hpp>
//Future me, here's a link to the Image Classes:
//https://www.sfml-dev.org/documentation/2.5.1/classsf_1_1Image.php
#include <string>
#include <iostream>
//Going to need to read in files. Hence the <fstream>
#include <fstream>
#include <time.h>
using namespace std;
//For SFML
using namespace sf;
//This will assign the appropriate ASCII character for the grayscale intensity/RGB of
//each pixel. Works as of now. Bless.
char assignAsciiChar(int grayscaleValue, string grayscaleRange) {
//God bless the TA's. (int) is a thing I can do. Horray.
return grayscaleRange[(int)(grayscaleValue/255.f*grayscaleRange.size())];
}
//I think I'll only need one function, seeing as I don't want to make a super mega loop
int main()
{
//[pixelSize]: Will allow for variable resolutions by sampling the grayscale value of
//a user-defined number of pixels. 1x1, 2x2, 4x4, 8x8. You get the deal, future me.
//[avalibleCharacters]: I'll make a string full of characters that can be used within
//this ASCII piece going from super white to super dark. That way I don't have to
//account for allpotential characters.
//[inputLocation & outputLocation]: Strings defining the filepath of the image to
//be converted and the .txt file to be output
//[ASCII]: Output string for the ASCII art file.
//[picture & grayscalePicture]: SFML Image types that represent the imported image
//and the image converted to grayscale respectively.
//[grayscaleDownscaledPicture]: Represents the grayscaled image downsized by
//user-specified pixel size. This is the imagedata that will be converted to ASCII.
//[grayscaleRange]: A string that contains the standard greyscale ramp.
//Referenced http://paulbourke.net/dataformats/asciiart/
int pixelSizeX = 1;
int pixelSizeY = 2;
int gsValue = 0;
string inputLocation;
string outputLocation;
//Presently just a static ramp of values. Maybe I'll expand to allow user input?
string grayscaleRange = "$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\|()1{}[]?-_+~<>i!lI;:,^`'. ";
string ASCII;
Image picture;
Image grayscalePicture(picture);
Image grayscaleDownscaledPicture(picture);
cout << "Give input filepath for the image you'd like to convert: ";
cin >> inputLocation;
cout << "Give output filepath where you'd like file to be saved: ";
cin >> outputLocation;
cout << "ASCII character represents \"x by x\" pixels (give \"x\"): ";
cin >> pixelSizeX;
//I think this is correct syntax to load with SFML.
picture.loadFromFile(inputLocation);
double rCon = .213;
double gCon = .715;
double bCon = .072;
//Conversion from color image to black and white image
//OH LORD I THINK THIS WORKS
for (int h = 0; h < picture.getSize().x; h++) {
for (int i = 0; i < picture.getSize().y; i++) {
//ACTUAL CONVERSION TO GO HERE
//WILL LIKELY USE getPixel()
//Apparently need double colon? Don't know why we need to scope it, but that's what works. Thanks TAs.
grayscalePicture.setPixel(h, i, Color::Color(picture.getPixel(h, i).r*rCon + picture.getPixel(h, i).g*gCon + picture.getPixel(h, i).b*bCon, picture.getPixel(h, i).r*rCon + picture.getPixel(h, i).g*gCon + picture.getPixel(h, i).b*bCon, picture.getPixel(h, i).r*rCon + picture.getPixel(h, i).g*gCon + picture.getPixel(h, i).b*bCon));
}
}
//Sizing down image as per the user specified pixelSize
//Holy crap this is sloppy. Well, it *works*. Maybe shoot for not having so many nested for loops.
pixelSizeY = 2 * pixelSizeX;
for (int j = 0; j < picture.getSize().x; j += pixelSizeX) {
for (int k = 0; k < picture.getSize().y; k += pixelSizeY) {
for (int l = 0; l < pixelSizeX; l++) {
for (int m = 0; m < pixelSizeY; m++) {
gsValue += grayscalePicture.getPixel(j*l, k*m).r;
}
}
//Ask if /= is good syntax
gsValue /= pixelSizeX + pixelSizeX + 1;
for (int n = 0; n < pixelSizeX; n++) {
for (int o = 0; o < pixelSizeY; o++) {
grayscaleDownscaledPicture.setPixel(j + n, k + o, Color::Color(gsValue, gsValue, gsValue));
}
}
}
}
//Conversion from bwPicture to ASCII
int tempASCII = 0;
for (int p = 0; p < grayscaleDownscaledPicture.getSize().y; p += pixelSizeY) {
for (int q = 0; q < grayscaleDownscaledPicture.getSize().x; q += pixelSizeX) {
ASCII += assignAsciiChar(grayscaleDownscaledPicture.getPixel(p, q).r, grayscaleRange);
}
//Alternate way to make a new line. Neat. Remember this, future me.
ASCII += "\n";
tempASCII++;
}
//Output to .txt file
ofstream output(outputLocation);
cout << "ASCCI art saved in this filepath: " << outputLocation;
cout << endl;
cout << "Press a key to close application.";
cin.get;
cin.get;
return 0;
}
Я хотел бы предположить, что проблема связана со средой VS, учитывая конкретныеошибка брошена.Но также вероятно, что мой код оказался большой кучей мусора.