first commit

This commit is contained in:
SunnyGor 2023-01-06 16:09:21 +08:00
parent e76c12195b
commit fd8dc03f93
5 changed files with 98 additions and 0 deletions

BIN
input/hello.bmp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 148 KiB

BIN
input/test1.bmp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 MiB

BIN
output/output.bmp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 150 KiB

98
zoom.cpp Normal file
View File

@ -0,0 +1,98 @@
#include <Windows.h>
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
int main(int argc, char ** argv)
{
FILE *fp = fopen("C:\\Users\\leong\\Desktop\\bmp_exam\\input\\hello.bmp","rb");
if (fp == 0)
return 0;
BITMAPFILEHEADER fileHead;
fread(&fileHead, sizeof(BITMAPFILEHEADER), 1, fp);
BITMAPINFOHEADER infoHead;
fread(&infoHead, sizeof(BITMAPINFOHEADER), 1, fp);
int width = infoHead.biWidth;
int height = infoHead.biHeight;
int biCount = infoHead.biBitCount;
RGBQUAD *pColorTable;
int pColorTableSize = 0;
pColorTable = new RGBQUAD[256];
fread(pColorTable, sizeof(RGBQUAD), 256, fp);
pColorTableSize = 1024;
unsigned char *pBmpBuf;
int lineByte = (width*biCount / 8 + 3) / 4 * 4;
pBmpBuf = new unsigned char[lineByte*height];
fread(pBmpBuf, lineByte*height, 1, fp);
fclose(fp);
printf("倍:");
// float lx, ly;
// scanf("%f%f", &lx, &ly);
// int dstWidth = round(double(lx*width));
// int dstHeight = round(double(ly*height));
float k;
scanf("%f", &k);
int dstWidth = round(double(k*width));
int dstHeight = round(double(k*height));
int lineByte2 = (dstWidth*biCount / 8 + 3) / 4 * 4;
unsigned char*pBmpBuf2;
pBmpBuf2 = new unsigned char[lineByte2*dstHeight];
for (int i = 0; i < dstHeight; ++i){
for (int j = 0; j < dstWidth; ++j){
unsigned char *p;
p = (unsigned char *)(pBmpBuf2 + lineByte2*i + j);
(*p) = 255;
}
}
int x = 0;
int y = 0;
for(int i = 0; i < height; ++i){
for(int j = 0; j < width; ++j){
unsigned char *p1, *p2;
// x = round(double(lx*j));
// y = round(double(ly*i));
x = round(double(k*j));
y = round(double(k*i));
p1 = (unsigned char *)(pBmpBuf + i*lineByte + j);
p2 = (unsigned char *)(pBmpBuf2 + y*lineByte2 + x);
(*p2) = (*p1);
}
}
FILE *fpo = fopen("C:\\Users\\leong\\Desktop\\bmp_exam\\output\\output.bmp", "wb");
if (fpo == 0)
return 0;
BITMAPFILEHEADER dstFileHead;
dstFileHead.bfOffBits = 14 + 40 + pColorTableSize;
dstFileHead.bfReserved1 = 0;
dstFileHead.bfReserved2 = 0;
dstFileHead.bfSize = sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER)+pColorTableSize + lineByte2*dstHeight;
dstFileHead.bfType = 0x4D42;
fwrite(&dstFileHead, sizeof(dstFileHead), 1, fpo);
BITMAPINFOHEADER dstInfoHead;
dstInfoHead.biBitCount = biCount;
dstInfoHead.biClrImportant = 0;
dstInfoHead.biClrUsed = 0;
dstInfoHead.biCompression = 0;
dstInfoHead.biHeight = dstHeight;
dstInfoHead.biPlanes = 1;
dstInfoHead.biSize = 40;
dstInfoHead.biSizeImage = lineByte2*dstHeight;
dstInfoHead.biWidth = dstWidth;
dstInfoHead.biXPelsPerMeter = 0;
dstInfoHead.biYPelsPerMeter = 0;
fwrite(&dstInfoHead, sizeof(BITMAPINFOHEADER), 1, fpo);
fwrite(pColorTable, sizeof(RGBQUAD), 256, fpo);
fwrite(pBmpBuf2, lineByte2*dstHeight, 1, fp);
fclose(fpo);
system("pause");
return 0;
}

BIN
zoom.exe Normal file

Binary file not shown.