#include <stdio.h>
#include <string.h>
#include <conio.h>
#include "bitmap.h"
#define MAXLEN 100
void drawBmp(Bitmap*);
Bitmap** splitBmp(Bitmap*,int32_t,int32_t,int32_t&);
Bitmap* extractBmp(Bitmap* , int32_t, int32_t, int32_t, int32_t);
int main(int argc, char* argv[]) {
if (argc < 6 || strcmp(argv[2], "-h") || strcmp(argv[4], "-w"))
return 0;
Bitmap* img = newBitmapFromFile(argv[1]);
int32_t nHeight = atoi(argv[3]);
int32_t nWidth = atoi(argv[5]);
if (img != NULL) {
drawBmp(img);
int32_t nImgs;
Bitmap** smallImgs = splitBmp(img, nHeight, nWidth, nImgs);
char s[MAXLEN];
for (int32_t i = 0; i < nImgs; i++) {
sprintf(s,"/Users/hans/Desktop/%03d.bmp", i+1);
writeBitmapToFile(s, smallImgs[i]);
freeBitmap(smallImgs[i]);
}
free(smallImgs);
freeBitmap(img);
}
getch();
return 0;
}
Bitmap** splitBmp(Bitmap* img, int32_t nHeight, int32_t nWidth, int32_t& nImgs) {
int32_t sHeight = img->dib.bmHeight / nHeight;
int32_t sWidth = img->dib.bmWidth / nWidth;
int32_t sLastHeight = img->dib.bmHeight % nHeight + sHeight;
int32_t sLastWidth = img->dib.bmWidth % nHeight + sWidth;
nImgs = nWidth * nHeight;
Bitmap** smallImgs = (Bitmap**) malloc(sizeof(Bitmap*) * nImgs);
int32_t i = 0;
int32_t height, width;
for (int32_t x = 0; x < img->dib.bmHeight; x += height) {
if (x + sLastHeight == img->dib.bmHeight)
height = sLastHeight;
else
height = sHeight;
for (int32_t y = 0; y < img->dib.bmWidth; y += width) {
if (x + sLastWidth == img->dib.bmWidth)
width = sLastWidth;
else
width = sWidth;
smallImgs[i++] = extractBmp(img,x,y,height,width);
}
}
return smallImgs;
}
Bitmap* extractBmp(Bitmap* img, int32_t x, int32_t y, int32_t height, int32_t width) {
Bitmap* newImg = (Bitmap*) malloc(sizeof(Bitmap));
*newImg = *img;
newImg->dib.bmWidth = width;
newImg->dib.bmHeight = height;
setRowSize(newImg);
newImg->dib.dataSize = newImg->rowSize * newImg->dib.bmHeight;
newImg->data = (uint8_t*) malloc(sizeof(uint8_t)*newImg->dib.dataSize);
for (int32_t i = 0; i < newImg->dib.bmHeight; i++) {
for (int32_t j = 0; j < newImg->dib.bmWidth; j++) {
(*newImg)(i,j) = (*img)(x + i, y + j);
}
}
return newImg;
}
#ifdef _WIN32
#define _CRT_SECURE_NO_WARNINGS
#include <windows.h>
void drawBmp(Bitmap* img) {
HWND console = GetConsoleWindow();
HDC hdc = GetDC(console);
for (int i = img->dib.bmHeight - 1; i >=0; i--) {
for (int j = 0; j < img->dib.bmWidth; j++) {
Pixel pixel = (*img)(i,j);
SetPixel(hdc, j, img->dib.bmHeight-1 - i, RGB(pixel.R, pixel.G, pixel.B));
}
}
ReleaseDC(console, hdc);
}
#else
void drawBmp(Bitmap* img) {
printf("Can't draw on console\n");
}
#endif
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdHJpbmcuaD4KI2luY2x1ZGUgPGNvbmlvLmg+CiNpbmNsdWRlICJiaXRtYXAuaCIKCiNkZWZpbmUgTUFYTEVOIDEwMAoKdm9pZCBkcmF3Qm1wKEJpdG1hcCopOwpCaXRtYXAqKiBzcGxpdEJtcChCaXRtYXAqLGludDMyX3QsaW50MzJfdCxpbnQzMl90Jik7CkJpdG1hcCogZXh0cmFjdEJtcChCaXRtYXAqICwgaW50MzJfdCwgaW50MzJfdCwgaW50MzJfdCwgaW50MzJfdCk7CgppbnQgbWFpbihpbnQgYXJnYywgY2hhciogYXJndltdKSB7CgoJaWYgKGFyZ2MgPCA2IHx8IHN0cmNtcChhcmd2WzJdLCAiLWgiKSB8fCBzdHJjbXAoYXJndls0XSwgIi13IikpCgkJcmV0dXJuIDA7CgoJQml0bWFwKiBpbWcgPSBuZXdCaXRtYXBGcm9tRmlsZShhcmd2WzFdKTsKCglpbnQzMl90IG5IZWlnaHQgPSBhdG9pKGFyZ3ZbM10pOwoJaW50MzJfdCBuV2lkdGggPSBhdG9pKGFyZ3ZbNV0pOwoKCWlmIChpbWcgIT0gTlVMTCkgewoKCQlkcmF3Qm1wKGltZyk7CgoJCWludDMyX3QgbkltZ3M7CgkJQml0bWFwKiogc21hbGxJbWdzID0gc3BsaXRCbXAoaW1nLCBuSGVpZ2h0LCBuV2lkdGgsIG5JbWdzKTsKCQljaGFyIHNbTUFYTEVOXTsKCQlmb3IgKGludDMyX3QgaSA9IDA7IGkgPCBuSW1nczsgaSsrKSB7CgkJCXNwcmludGYocywiL1VzZXJzL2hhbnMvRGVza3RvcC8lMDNkLmJtcCIsIGkrMSk7CgkJCXdyaXRlQml0bWFwVG9GaWxlKHMsIHNtYWxsSW1nc1tpXSk7CgkJCWZyZWVCaXRtYXAoc21hbGxJbWdzW2ldKTsJCgkJfQoKCQlmcmVlKHNtYWxsSW1ncyk7CgkJZnJlZUJpdG1hcChpbWcpOwoJfQoJZ2V0Y2goKTsKCXJldHVybiAwOwp9CgpCaXRtYXAqKiBzcGxpdEJtcChCaXRtYXAqIGltZywgaW50MzJfdCBuSGVpZ2h0LCBpbnQzMl90IG5XaWR0aCwgaW50MzJfdCYgbkltZ3MpIHsKCWludDMyX3Qgc0hlaWdodCA9IGltZy0+ZGliLmJtSGVpZ2h0IC8gbkhlaWdodDsKCWludDMyX3Qgc1dpZHRoID0gaW1nLT5kaWIuYm1XaWR0aCAvIG5XaWR0aDsKCWludDMyX3Qgc0xhc3RIZWlnaHQgPSBpbWctPmRpYi5ibUhlaWdodCAlIG5IZWlnaHQgKyBzSGVpZ2h0OwoJaW50MzJfdCBzTGFzdFdpZHRoID0gaW1nLT5kaWIuYm1XaWR0aCAlIG5IZWlnaHQgKyBzV2lkdGg7CgoJbkltZ3MgPSBuV2lkdGggKiBuSGVpZ2h0OwoJQml0bWFwKiogc21hbGxJbWdzID0gKEJpdG1hcCoqKSBtYWxsb2Moc2l6ZW9mKEJpdG1hcCopICogbkltZ3MpOwoKCWludDMyX3QgaSA9IDA7CglpbnQzMl90IGhlaWdodCwgd2lkdGg7CgoKCWZvciAoaW50MzJfdCB4ID0gMDsgeCA8IGltZy0+ZGliLmJtSGVpZ2h0OyB4ICs9IGhlaWdodCkgewoKCQlpZiAoeCArIHNMYXN0SGVpZ2h0ID09IGltZy0+ZGliLmJtSGVpZ2h0KQoJCQloZWlnaHQgPSBzTGFzdEhlaWdodDsKCQllbHNlCgkJCWhlaWdodCA9IHNIZWlnaHQ7CgoJCWZvciAoaW50MzJfdCB5ID0gMDsgeSA8IGltZy0+ZGliLmJtV2lkdGg7IHkgKz0gd2lkdGgpIHsKCQkJaWYgKHggKyBzTGFzdFdpZHRoID09IGltZy0+ZGliLmJtV2lkdGgpCgkJCQl3aWR0aCA9IHNMYXN0V2lkdGg7CgkJCWVsc2UKCQkJCXdpZHRoID0gc1dpZHRoOwoKCQkJc21hbGxJbWdzW2krK10gPSBleHRyYWN0Qm1wKGltZyx4LHksaGVpZ2h0LHdpZHRoKTsJCQoJCX0KCX0KCglyZXR1cm4gc21hbGxJbWdzOwp9CgoKQml0bWFwKiBleHRyYWN0Qm1wKEJpdG1hcCogaW1nLCBpbnQzMl90IHgsIGludDMyX3QgeSwgaW50MzJfdCBoZWlnaHQsIGludDMyX3Qgd2lkdGgpIHsKCglCaXRtYXAqIG5ld0ltZyA9IChCaXRtYXAqKSBtYWxsb2Moc2l6ZW9mKEJpdG1hcCkpOwoJKm5ld0ltZyA9ICppbWc7CgoJbmV3SW1nLT5kaWIuYm1XaWR0aCA9IHdpZHRoOwoJbmV3SW1nLT5kaWIuYm1IZWlnaHQgPSBoZWlnaHQ7CgoJc2V0Um93U2l6ZShuZXdJbWcpOwoJbmV3SW1nLT5kaWIuZGF0YVNpemUgPSBuZXdJbWctPnJvd1NpemUgKiBuZXdJbWctPmRpYi5ibUhlaWdodDsKCgluZXdJbWctPmRhdGEgPSAodWludDhfdCopIG1hbGxvYyhzaXplb2YodWludDhfdCkqbmV3SW1nLT5kaWIuZGF0YVNpemUpOwoKCWZvciAoaW50MzJfdCBpID0gMDsgaSA8IG5ld0ltZy0+ZGliLmJtSGVpZ2h0OyBpKyspIHsKCQlmb3IgKGludDMyX3QgaiA9IDA7IGogPCBuZXdJbWctPmRpYi5ibVdpZHRoOyBqKyspIHsKCQkJKCpuZXdJbWcpKGksaikgPSAoKmltZykoeCArIGksIHkgKyBqKTsKCQl9Cgl9CgoJcmV0dXJuIG5ld0ltZzsKfQoKCiNpZmRlZiBfV0lOMzIKI2RlZmluZSBfQ1JUX1NFQ1VSRV9OT19XQVJOSU5HUwojaW5jbHVkZSA8d2luZG93cy5oPgp2b2lkIGRyYXdCbXAoQml0bWFwKiBpbWcpIHsKCUhXTkQgY29uc29sZSA9IEdldENvbnNvbGVXaW5kb3coKTsKCUhEQyBoZGMgPSBHZXREQyhjb25zb2xlKTsKCglmb3IgKGludCBpID0gaW1nLT5kaWIuYm1IZWlnaHQgLSAxOyBpID49MDsgaS0tKSB7CgkJZm9yIChpbnQgaiA9IDA7IGogPCBpbWctPmRpYi5ibVdpZHRoOyBqKyspIHsKCQkJUGl4ZWwgcGl4ZWwgPSAoKmltZykoaSxqKTsKCQkJU2V0UGl4ZWwoaGRjLCBqLCBpbWctPmRpYi5ibUhlaWdodC0xIC0gaSwgUkdCKHBpeGVsLlIsIHBpeGVsLkcsIHBpeGVsLkIpKTsKCQl9Cgl9CgoJUmVsZWFzZURDKGNvbnNvbGUsIGhkYyk7Cn0KI2Vsc2UKdm9pZCBkcmF3Qm1wKEJpdG1hcCogaW1nKSB7CglwcmludGYoIkNhbid0IGRyYXcgb24gY29uc29sZVxuIik7Cn0KI2VuZGlmCgoK
Main.java:1: error: illegal character: '#'
#include <stdio.h>
^
Main.java:1: error: class, interface, or enum expected
#include <stdio.h>
^
Main.java:2: error: illegal character: '#'
#include <string.h>
^
Main.java:3: error: illegal character: '#'
#include <conio.h>
^
Main.java:4: error: illegal character: '#'
#include "bitmap.h"
^
Main.java:6: error: illegal character: '#'
#define MAXLEN 100
^
Main.java:9: error: class, interface, or enum expected
Bitmap** splitBmp(Bitmap*,int32_t,int32_t,int32_t&);
^
Main.java:10: error: class, interface, or enum expected
Bitmap* extractBmp(Bitmap* , int32_t, int32_t, int32_t, int32_t);
^
Main.java:12: error: class, interface, or enum expected
int main(int argc, char* argv[]) {
^
Main.java:17: error: class, interface, or enum expected
Bitmap* img = newBitmapFromFile(argv[1]);
^
Main.java:19: error: class, interface, or enum expected
int32_t nHeight = atoi(argv[3]);
^
Main.java:20: error: class, interface, or enum expected
int32_t nWidth = atoi(argv[5]);
^
Main.java:22: error: class, interface, or enum expected
if (img != NULL) {
^
Main.java:26: error: class, interface, or enum expected
int32_t nImgs;
^
Main.java:27: error: class, interface, or enum expected
Bitmap** smallImgs = splitBmp(img, nHeight, nWidth, nImgs);
^
Main.java:28: error: class, interface, or enum expected
char s[MAXLEN];
^
Main.java:29: error: class, interface, or enum expected
for (int32_t i = 0; i < nImgs; i++) {
^
Main.java:29: error: class, interface, or enum expected
for (int32_t i = 0; i < nImgs; i++) {
^
Main.java:29: error: class, interface, or enum expected
for (int32_t i = 0; i < nImgs; i++) {
^
Main.java:31: error: class, interface, or enum expected
writeBitmapToFile(s, smallImgs[i]);
^
Main.java:32: error: class, interface, or enum expected
freeBitmap(smallImgs[i]);
^
Main.java:33: error: class, interface, or enum expected
}
^
Main.java:36: error: class, interface, or enum expected
freeBitmap(img);
^
Main.java:37: error: class, interface, or enum expected
}
^
Main.java:39: error: class, interface, or enum expected
return 0;
^
Main.java:40: error: class, interface, or enum expected
}
^
Main.java:44: error: class, interface, or enum expected
int32_t sWidth = img->dib.bmWidth / nWidth;
^
Main.java:45: error: class, interface, or enum expected
int32_t sLastHeight = img->dib.bmHeight % nHeight + sHeight;
^
Main.java:46: error: class, interface, or enum expected
int32_t sLastWidth = img->dib.bmWidth % nHeight + sWidth;
^
Main.java:48: error: class, interface, or enum expected
nImgs = nWidth * nHeight;
^
Main.java:49: error: class, interface, or enum expected
Bitmap** smallImgs = (Bitmap**) malloc(sizeof(Bitmap*) * nImgs);
^
Main.java:51: error: class, interface, or enum expected
int32_t i = 0;
^
Main.java:52: error: class, interface, or enum expected
int32_t height, width;
^
Main.java:55: error: class, interface, or enum expected
for (int32_t x = 0; x < img->dib.bmHeight; x += height) {
^
Main.java:55: error: class, interface, or enum expected
for (int32_t x = 0; x < img->dib.bmHeight; x += height) {
^
Main.java:55: error: class, interface, or enum expected
for (int32_t x = 0; x < img->dib.bmHeight; x += height) {
^
Main.java:59: error: class, interface, or enum expected
else
^
Main.java:62: error: class, interface, or enum expected
for (int32_t y = 0; y < img->dib.bmWidth; y += width) {
^
Main.java:62: error: class, interface, or enum expected
for (int32_t y = 0; y < img->dib.bmWidth; y += width) {
^
Main.java:62: error: class, interface, or enum expected
for (int32_t y = 0; y < img->dib.bmWidth; y += width) {
^
Main.java:65: error: class, interface, or enum expected
else
^
Main.java:68: error: class, interface, or enum expected
smallImgs[i++] = extractBmp(img,x,y,height,width);
^
Main.java:69: error: class, interface, or enum expected
}
^
Main.java:73: error: class, interface, or enum expected
}
^
Main.java:79: error: class, interface, or enum expected
*newImg = *img;
^
Main.java:81: error: class, interface, or enum expected
newImg->dib.bmWidth = width;
^
Main.java:82: error: class, interface, or enum expected
newImg->dib.bmHeight = height;
^
Main.java:84: error: class, interface, or enum expected
setRowSize(newImg);
^
Main.java:85: error: class, interface, or enum expected
newImg->dib.dataSize = newImg->rowSize * newImg->dib.bmHeight;
^
Main.java:87: error: class, interface, or enum expected
newImg->data = (uint8_t*) malloc(sizeof(uint8_t)*newImg->dib.dataSize);
^
Main.java:89: error: class, interface, or enum expected
for (int32_t i = 0; i < newImg->dib.bmHeight; i++) {
^
Main.java:89: error: class, interface, or enum expected
for (int32_t i = 0; i < newImg->dib.bmHeight; i++) {
^
Main.java:89: error: class, interface, or enum expected
for (int32_t i = 0; i < newImg->dib.bmHeight; i++) {
^
Main.java:90: error: class, interface, or enum expected
for (int32_t j = 0; j < newImg->dib.bmWidth; j++) {
^
Main.java:90: error: class, interface, or enum expected
for (int32_t j = 0; j < newImg->dib.bmWidth; j++) {
^
Main.java:92: error: class, interface, or enum expected
}
^
Main.java:96: error: class, interface, or enum expected
}
^
Main.java:99: error: illegal character: '#'
#ifdef _WIN32
^
Main.java:100: error: illegal character: '#'
#define _CRT_SECURE_NO_WARNINGS
^
Main.java:101: error: illegal character: '#'
#include <windows.h>
^
Main.java:104: error: class, interface, or enum expected
HDC hdc = GetDC(console);
^
Main.java:106: error: class, interface, or enum expected
for (int i = img->dib.bmHeight - 1; i >=0; i--) {
^
Main.java:106: error: class, interface, or enum expected
for (int i = img->dib.bmHeight - 1; i >=0; i--) {
^
Main.java:106: error: class, interface, or enum expected
for (int i = img->dib.bmHeight - 1; i >=0; i--) {
^
Main.java:107: error: class, interface, or enum expected
for (int j = 0; j < img->dib.bmWidth; j++) {
^
Main.java:107: error: class, interface, or enum expected
for (int j = 0; j < img->dib.bmWidth; j++) {
^
Main.java:109: error: class, interface, or enum expected
SetPixel(hdc, j, img->dib.bmHeight-1 - i, RGB(pixel.R, pixel.G, pixel.B));
^
Main.java:110: error: class, interface, or enum expected
}
^
Main.java:114: error: class, interface, or enum expected
}
^
Main.java:115: error: illegal character: '#'
#else
^
Main.java:118: error: class, interface, or enum expected
}
^
Main.java:119: error: illegal character: '#'
#endif
^
72 errors