Я пытался работать с картинками в формате base64 в vala. Но у меня проблемы. Я написал небольшую программу Vala, которая показывает проблему:
Я могу легко загрузить файл изображения. Я могу преобразовать его в байты, из байтов в массив uchar, из этого в строку в кодировке base64 и обратно в байты и проанализировать его в MemoryInputStream. Но когда я анализирую это в Pixbuf, он говорит мне, что формат не распознан. Затем я могу запустить bytes.compare (reversed_bytes), чтобы увидеть, что содержимое там точно такое же. MemoryInputStream как-то неправильно читает?
Во всяком случае, вот пример программы:
using Gdk;
static void main(string[] args){
string path = "%s".printf(args[1]);
Pixbuf original_pixbuf = new Gdk.Pixbuf.from_file(path);
test_pixbuf_from_b64(original_pixbuf);
}
public void test_pixbuf_from_b64(Pixbuf original_pixbuf){
Bytes bytes = original_pixbuf.pixel_bytes;
var uchar_array = bytes.get_data();
string base64_string = Base64.encode(uchar_array);
var reversed_uchar_array = Base64.decode(base64_string);
Bytes reversed_bytes = new Bytes(reversed_uchar_array);
//Lets test the contents of the bytes to see they are equal
if(bytes.compare(reversed_bytes) == 0){
print("The reversed bytes value is the same as the original!\n");
}else{
print("The value of reversed bytes is different from the original!\n");
}
MemoryInputStream mis = new MemoryInputStream.from_bytes(reversed_bytes);
try{
Pixbuf reversed_pixbuf = new Pixbuf.from_stream(mis); //This fails, with a format not recognized error. Why though?
}catch(Error er){
stdout.printf("The following error occurred when recreating the pixbuf: %s", er.message);
}
}
Компилировать с:
valac t.vala --pkg=gdk-pixbuf-2.0
запустить с:
./t "path/to/image/file/here"
Я не могу продолжать свой проект, пока не пойму это.