코드 소스 오픈 (5) - 컬러 bmp 그림 그레이스케일
#include <iostream.h>
#include <windows.h>
#include <stdio.h>
/*BMP :
㈠BITMAPFILEHEADER: ( BMP )
bfType="BM"
bfSize
bfReserved1
bfReserved2
bfOffBits ,
㈡BITMAPINFOHEADER:
biSize , 40
biWidth ,
biHeight ,
biPlanes
biBitCount
biCompression
biSizeImage biSizeImage=biWidth_*biHeight, biWidth 4
biCompression BI_RGB, 0
biXPelsPerMeter
biYPelsPerMeter
biClrUsed
biClrImportant
㈢Palette :
,
㈣DIB Pixels :
*/
BITMAPFILEHEADER bf; //
BITMAPINFOHEADER bi; //
RGBQUAD *palette=NULL; //
BYTE *m_imagedata=NULL; //
BYTE *m_outputdata=NULL; //
int m_ImageWidth; //
int m_ImageHeight; //
void main()
{
FILE *fp1,*fp2; // ,fp1 ,fp2
// ,
if((fp1=fopen("test.bmp","rb"))==NULL)
{
MessageBox(NULL," ","warning",MB_OK);
}
fread((LPSTR)&bf,sizeof(BITMAPFILEHEADER),1,fp1); // , ( )
//
int temp=bf.bfType; //
cout<<"BM :"<<(char *)(&temp)<<'
';
cout<<" :"<<bf.bfOffBits<<'
';
fread((LPSTR)&bi,sizeof(BITMAPINFOHEADER),1,fp1); //
//
cout<<" :"<<bi.biWidth<<'
';
cout<<" :"<<bi.biHeight<<'
';
m_ImageWidth=bi.biWidth; //
m_ImageHeight=bi.biHeight; //
// 4 , ,
while(m_ImageWidth%4!=0) // 4
m_ImageWidth++;
//
palette=(RGBQUAD *)new BYTE[bf.bfOffBits-sizeof(BITMAPFILEHEADER)-sizeof(BITMAPINFOHEADER)];
fread(palette,bf.bfOffBits-sizeof(BITMAPFILEHEADER)-sizeof(BITMAPINFOHEADER),1,fp1);
m_imagedata= new BYTE[m_ImageHeight*m_ImageWidth*3]; //
fread(m_imagedata,m_ImageHeight*m_ImageWidth*3,1,fp1); //
// 0 , , .......
//
m_outputdata= new BYTE[m_ImageHeight*m_ImageWidth*3]; //
// m_imagedata , m_outputdata
// , , ,
// copy ,
for(int i=0;i<m_ImageHeight;i++)
{
for(int j=0;j<m_ImageWidth*3;j=j+3)
{
int k=m_ImageWidth*i*3+j;
int gray=(int)(0.3*m_imagedata[k]+0.59*m_imagedata[k+1]+0.11*m_imagedata[k+2]);
m_outputdata[k]=m_outputdata[k+1]=m_outputdata[k+2]=gray;
}
}
//
if((fp2=fopen("result.bmp","wb"))==NULL)
{
MessageBox(NULL," ","warning",MB_OK);
}
// , test
fwrite((LPSTR)&bf,sizeof(BITMAPFILEHEADER),1,fp2);
fwrite((LPSTR)&bi,sizeof(BITMAPINFOHEADER),1,fp2);
fwrite(palette,bf.bfOffBits-sizeof(BITMAPFILEHEADER)-sizeof(BITMAPINFOHEADER),1,fp2);
fwrite(m_outputdata,m_ImageHeight*m_ImageWidth*3,1,fp2); //
fclose(fp1); //
fclose(fp2);
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
java에서 InputStream, String, File 간의 상호 전환 비교InputStream, String, File 상호 전환 1. String --> InputStream 2. InputStream --> String 오늘 인터넷에서 또 다른 방법을 보았는데, 특별히 가지고 와서 공...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.