>>55
#include <windows.h>
#include <stdio.h>
#pragma comment (lib, "user32.lib")
#pragma comment (lib, "gdi32.lib")
int main(int argc, char **argv) {
 if (argc != 3) {printf("%s InputFile OutputFile\n", *argv); return EXIT_FAILURE;}
 HBITMAP hBmp = (HBITMAP)LoadImage(NULL, argv[1], IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE | LR_MONOCHROME);
 if (!hBmp) {printf("ファイルがロードできない\n"); return EXIT_FAILURE;}
 BITMAP bm;
 GetObject(hBmp, sizeof bm, &bm);
 int size = bm.bmHeight * ((bm.bmWidthBytes + 3) & ~3);
 void *bits = malloc(size);
 if (!bits) {printf("メモリ無さ杉\n"); return EXIT_FAILURE;}
 struct {BITMAPINFOHEADER b; RGBQUAD c[2];} bi =
  {{sizeof bi.b, bm.bmWidth, bm.bmHeight, 1, 1},{{255, 255, 255}}};
 HDC hDC = GetDC(NULL);
 GetDIBits(hDC, hBmp, 0, bm.bmHeight, bits, (BITMAPINFO *)&bi, DIB_RGB_COLORS);
 ReleaseDC(NULL, hDC);
 DeleteObject(hBmp);
 FILE *fp = fopen(argv[2], "wb");
 if (!fp) {printf("ファイルがオープンできない: %s\n", argv[2]); return EXIT_FAILURE;}
 BITMAPFILEHEADER bf = {'MB', sizeof bf + sizeof bi + size, 0, 0, sizeof bf + sizeof bi};
 fwrite(&bf, sizeof bf, 1, fp);
 fwrite(&bi, sizeof bi, 1, fp);
 fwrite(bits, size, 1, fp);
 fclose(fp);
 free(bits);
 return EXIT_SUCCESS;
}