#include "bitmap.h"
void setRowSize(Bitmap* img) {
img->rowSize = ((img->dib.bitDepth * img->dib.bmWidth + 31) / 32) * 4;
}
void freeBitmap(Bitmap* img) {
free(img->data);
free(img);
}
Bitmap* newBitmapFromFile(const char* filePath) {
FILE* inFile = fopen(filePath, "rb");
if (!inFile)
return NULL;
Bitmap* img = (Bitmap*) malloc(sizeof(Bitmap));
fseek(inFile, 0, SEEK_SET);
fread(&img->header, sizeof(BitmapHeader), 1, inFile);
if (img->header.bmType !=0x4D42)
{
fclose(inFile);
free(img);
return NULL;
}
fseek(inFile, sizeof(BitmapHeader), SEEK_SET);
fread(&img->dib, sizeof(BitmapDIB), 1, inFile);
img->data = (uint8_t*) malloc(img->dib.dataSize);
if (!img->data)
{
fclose(inFile);
free(img);
return NULL;
}
fseek(inFile, img->header.bmPixArrayOffset, SEEK_SET);
fread(img->data, img->dib.dataSize, 1, inFile);
setRowSize(img);
fclose(inFile);
return img;
}
bool writeBitmapToFile(const char* filePath, Bitmap* img) {
FILE* outFile = fopen(filePath, "wb");
if (!outFile)
return false;
uint32_t headerSize = sizeof(BitmapHeader) + sizeof(BitmapDIB);
if (fwrite(img, headerSize, 1, outFile) == 0) {
fclose(outFile);
remove(filePath);
return false;
}
if (fwrite(img->data, img->dib.dataSize, 1, outFile) == 0) {
fclose(outFile);
remove(filePath);
}
fclose(outFile);
return true;
}
I2luY2x1ZGUgImJpdG1hcC5oIgoKCnZvaWQgc2V0Um93U2l6ZShCaXRtYXAqIGltZykgewoJaW1nLT5yb3dTaXplID0gKChpbWctPmRpYi5iaXREZXB0aCAqIGltZy0+ZGliLmJtV2lkdGggKyAzMSkgLyAzMikgKiA0Owp9Cgp2b2lkIGZyZWVCaXRtYXAoQml0bWFwKiBpbWcpIHsKCWZyZWUoaW1nLT5kYXRhKTsKCWZyZWUoaW1nKTsKfQoKQml0bWFwKiBuZXdCaXRtYXBGcm9tRmlsZShjb25zdCBjaGFyKiBmaWxlUGF0aCkgewoJRklMRSogaW5GaWxlID0gZm9wZW4oZmlsZVBhdGgsICJyYiIpOwoKCWlmICghaW5GaWxlKQoJCXJldHVybiBOVUxMOwoKCUJpdG1hcCogaW1nID0gKEJpdG1hcCopIG1hbGxvYyhzaXplb2YoQml0bWFwKSk7CgoJZnNlZWsoaW5GaWxlLCAwLCBTRUVLX1NFVCk7CglmcmVhZCgmaW1nLT5oZWFkZXIsIHNpemVvZihCaXRtYXBIZWFkZXIpLCAxLCBpbkZpbGUpOwoKCWlmIChpbWctPmhlYWRlci5ibVR5cGUgIT0weDRENDIpCgl7CgkJZmNsb3NlKGluRmlsZSk7CgkJZnJlZShpbWcpOwoJCXJldHVybiBOVUxMOwoJfQoKCWZzZWVrKGluRmlsZSwgc2l6ZW9mKEJpdG1hcEhlYWRlciksIFNFRUtfU0VUKTsKCWZyZWFkKCZpbWctPmRpYiwgc2l6ZW9mKEJpdG1hcERJQiksIDEsIGluRmlsZSk7CgoJaW1nLT5kYXRhID0gKHVpbnQ4X3QqKSBtYWxsb2MoaW1nLT5kaWIuZGF0YVNpemUpOwoKCWlmICghaW1nLT5kYXRhKQoJewoJCWZjbG9zZShpbkZpbGUpOwoJCWZyZWUoaW1nKTsKCQlyZXR1cm4gTlVMTDsKCX0KCglmc2VlayhpbkZpbGUsIGltZy0+aGVhZGVyLmJtUGl4QXJyYXlPZmZzZXQsIFNFRUtfU0VUKTsKCWZyZWFkKGltZy0+ZGF0YSwgaW1nLT5kaWIuZGF0YVNpemUsIDEsIGluRmlsZSk7CgoJc2V0Um93U2l6ZShpbWcpOwoKCWZjbG9zZShpbkZpbGUpOwoKCXJldHVybiBpbWc7Cn0KCmJvb2wgd3JpdGVCaXRtYXBUb0ZpbGUoY29uc3QgY2hhciogZmlsZVBhdGgsIEJpdG1hcCogaW1nKSB7CglGSUxFKiBvdXRGaWxlID0gZm9wZW4oZmlsZVBhdGgsICJ3YiIpOwoKCglpZiAoIW91dEZpbGUpCgkJcmV0dXJuIGZhbHNlOwoKCXVpbnQzMl90IGhlYWRlclNpemUgPSBzaXplb2YoQml0bWFwSGVhZGVyKSArIHNpemVvZihCaXRtYXBESUIpOwoKCWlmIChmd3JpdGUoaW1nLCBoZWFkZXJTaXplLCAxLCBvdXRGaWxlKSA9PSAwKSB7CgkJZmNsb3NlKG91dEZpbGUpOwoJCXJlbW92ZShmaWxlUGF0aCk7CgkJcmV0dXJuIGZhbHNlOwoJfSAgIAoKCWlmIChmd3JpdGUoaW1nLT5kYXRhLCBpbWctPmRpYi5kYXRhU2l6ZSwgMSwgb3V0RmlsZSkgPT0gMCkgewoJCWZjbG9zZShvdXRGaWxlKTsKCQlyZW1vdmUoZmlsZVBhdGgpOwoJfQoKCWZjbG9zZShvdXRGaWxlKTsKCgoJcmV0dXJuIHRydWU7Cn0=
Main.java:1: error: illegal character: '#'
#include "bitmap.h"
^
Main.java:1: error: class, interface, or enum expected
#include "bitmap.h"
^
Main.java:6: error: class, interface, or enum expected
}
^
Main.java:10: error: class, interface, or enum expected
free(img);
^
Main.java:11: error: class, interface, or enum expected
}
^
Main.java:16: error: class, interface, or enum expected
if (!inFile)
^
Main.java:19: error: class, interface, or enum expected
Bitmap* img = (Bitmap*) malloc(sizeof(Bitmap));
^
Main.java:21: error: class, interface, or enum expected
fseek(inFile, 0, SEEK_SET);
^
Main.java:22: error: class, interface, or enum expected
fread(&img->header, sizeof(BitmapHeader), 1, inFile);
^
Main.java:24: error: class, interface, or enum expected
if (img->header.bmType !=0x4D42)
^
Main.java:27: error: class, interface, or enum expected
free(img);
^
Main.java:28: error: class, interface, or enum expected
return NULL;
^
Main.java:29: error: class, interface, or enum expected
}
^
Main.java:32: error: class, interface, or enum expected
fread(&img->dib, sizeof(BitmapDIB), 1, inFile);
^
Main.java:34: error: class, interface, or enum expected
img->data = (uint8_t*) malloc(img->dib.dataSize);
^
Main.java:36: error: class, interface, or enum expected
if (!img->data)
^
Main.java:39: error: class, interface, or enum expected
free(img);
^
Main.java:40: error: class, interface, or enum expected
return NULL;
^
Main.java:41: error: class, interface, or enum expected
}
^
Main.java:44: error: class, interface, or enum expected
fread(img->data, img->dib.dataSize, 1, inFile);
^
Main.java:46: error: class, interface, or enum expected
setRowSize(img);
^
Main.java:48: error: class, interface, or enum expected
fclose(inFile);
^
Main.java:50: error: class, interface, or enum expected
return img;
^
Main.java:51: error: class, interface, or enum expected
}
^
Main.java:57: error: class, interface, or enum expected
if (!outFile)
^
Main.java:60: error: class, interface, or enum expected
uint32_t headerSize = sizeof(BitmapHeader) + sizeof(BitmapDIB);
^
Main.java:62: error: class, interface, or enum expected
if (fwrite(img, headerSize, 1, outFile) == 0) {
^
Main.java:64: error: class, interface, or enum expected
remove(filePath);
^
Main.java:65: error: class, interface, or enum expected
return false;
^
Main.java:66: error: class, interface, or enum expected
}
^
Main.java:70: error: class, interface, or enum expected
remove(filePath);
^
Main.java:71: error: class, interface, or enum expected
}
^
Main.java:76: error: class, interface, or enum expected
return true;
^
Main.java:77: error: class, interface, or enum expected
}
^
34 errors