Я новичок в C++, и мне было поручено обработать файл fli, но я понятия не имею, как их правильно открыть. Пока мой код выглядит так:
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main() {
fstream newfile;
newfile.open("testvid.fli", ios::in);object
if (newfile.is_open()) {
string tp;
while (getline(newfile, tp)) {
cout << tp << "\n";
}
newfile.close();
}
std::cin.ignore();
}
Но это дает мне тарабарщину. Кто-нибудь может помочь?
Подождите, вы имеете в виду, что у вас есть видеофайл, и вы хотите прочитать текстовые строки из него? Что ты вообще пытаешься сделать??





Я раньше не работал с файлами .fli. Это FLIC-файл (используется для хранения анимаций)? Тогда имеет смысл, что попытка прочитать их как строки приводит к тарабарщине. Вы можете попробовать либо Библиотека Aseprite FLIC, либо LibFLIC.
Обновлено: я использовал библиотеку Asperite и gif-h для преобразования файла FLIC в GIF. Извините за неэффективный код - это просто быстрый код, чтобы заставить его работать.
#include <iostream>
#include <iomanip>
#include <cstdio>
#include <vector>
#include <string>
#include <gif.h>
#include <flic.h>
int main() {
std::string fname_input { "../data/2noppaa.fli" };
std::string fname_output { "../data/2noppaa.gif" };
// Set up FLIC file
FILE *f = std::fopen(fname_input.c_str(), "rb");
flic::StdioFileInterface file(f);
flic::Decoder decoder(&file);
flic::Header header;
if (!decoder.readHeader(header)) {
std::cout << "Error: could not read header of FLIC file." << std::endl;
return 2;
}
const size_t frame_size = header.width * header.height;
// Set up FLIC reader
std::vector<uint8_t> buffer(frame_size);
flic::Frame frame;
frame.pixels = &buffer[0];
frame.rowstride = header.width;
// Set up GIF writer
GifWriter g;
GifBegin(&g, fname_output.c_str(), header.width, header.height, 0);
std::vector<uint8_t> gif_frame(frame_size * 4, 255);
flic::Color flic_color;
for (int i = 0; i < header.frames; ++i) {
if (!decoder.readFrame(frame)) {
break;
}
// Convert FLIC frame to GIF
for (size_t j = 0; j < frame_size; ++j) {
flic_color = frame.colormap[ frame.pixels[j] ];
gif_frame.at(j*4) = flic_color.r;
gif_frame.at(j*4 + 1) = flic_color.g;
gif_frame.at(j*4 + 2) = flic_color.b;
}
GifWriteFrame(&g, gif_frame.data(), header.width, header.height, 0);
}
GifEnd(&g);
}
Спасибо за ваш ответ, я использовал Aseprite, но либо выдает ошибку, либо ничего не показывает. Не могли бы вы привести пример? Я работаю над этим уже неделю и до сих пор безуспешно.
Смотрите мой обновленный пост.
Ты самый лучший. Спасибо 1000 раз)
Я предполагаю, что тип файла
fli, на который вы ссылаетесь, является типом файла анимации, и в этом случае вы в настоящее время открываете его как текстовый файл ... Этот тип файла будет двоичным.