|
아래 코드를 찬찬히 보시면 아실 겁니다.
//-------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Graphics::TBitmap *pBitmap = new Graphics::TBitmap();
pBitmap->Width = m_iScreenWidth;
pBitmap->Height = m_iScreenHeight;
pBitmap->PixelFormat = pf24bit;
//pBitmap->PixelFormat = pf16bit;
BitBlt(pBitmap->Canvas->Handle, 0, 0, m_iScreenWidth, m_iScreenHeight, m_hHdc, 0, 0, SRCCOPY);
//Image1->Picture->Assign(pBitmap);
int r,g,b,x,y;
Byte *p;
int Amount = Edit1->Text.ToInt();
for(y=0;y<m_iScreenHeight / 4;y++){
p = (Byte *)pBitmap->ScanLine[y];
for(x=0;x<m_iScreenWidth/ 4;x++){
r = p[x * 3];
g = p[x * 3 + 1];
b = p[x * 3 + 2];
p[x*3] = (Byte)(r + ((255-r)*Amount) / 255);
p[x*3+1] = (Byte)(g + ((255-g)*Amount) / 255);
p[x*3+2] = (Byte)(b + ((255-b)*Amount) / 255);
}
}
Image1->Picture->Assign(pBitmap);
delete pBitmap;
}
//-----------------------------------------------------
보시면 char대신에 Byte를 사용한 것만 다릅니다.
건승을 빕니다.
mspower 님이 쓰신 글 :
: 도움 말씀 감사합니다.
:
: 소리바람님 말씀대로 해봐도, 제가 원하는 이미지가 안 나오네요.
:
: 색상이 반전(?) 되서.ㅠ.ㅠ
:
: 결과물을 이미지 파일로 첨부합니다. 보시고, 제 컴에서만 그런건지 확인 부탁드립니다.
:
: 소리바람.OJ 님이 쓰신 글 :
: : 아마 색상이 반전이 되어서 당황하셨겠군요.
: :
: : int Amount = 200;
: :
: : 양수의 범위에서 255까지 입력을 해 보세요.
: : 간단하면서 동작이 잘 되더군요.
: :
: : 건승을 빕니다.
: :
: : 넘초보 님이 쓰신 글 :
: : : 이미지 밝기 조절하여 출력하고자 합니다.
: : :
: : : 검색해 보면 R,G,B 값에 원하는 값을 더하여 출력하면 되는것으로 말씀들 하시고,
: : :
: : : 델마당에서 셈플을 받아 실행해보면, 밝기가 조절이 되는데,
: : :
: : : 빌더에서 간단히 테스트로 구현해 보았는데,
: : :
: : : 색상이 이상하게 변하네요.
: : :
: : : 혹 아시는분 도움 부탁드립니다.
|