|
Windows\WinNT.BMP를 읽어 PixelFormat를 변경한 후 각기 다른 이름으로 저장해 봤습니다.
참조하세요.
void __fastcall TForm1::Button1Click(TObject *Sender)
{
// 실행 결과
// "123" = 48K
// "123-32" = 188K
// "123-24" = 142K
// "123-8" = 48K
// "123-4" = 24K
// "123-1" = 7K
Image1->Picture->LoadFromFile( "C:\\Windows\\WinNT.BMP" );
Image1->Picture->SaveToFile( "123" );
Image1->Picture->Bitmap->PixelFormat = pf32bit;
Image1->Picture->SaveToFile( "123-32" );
Image1->Picture->Bitmap->PixelFormat = pf24bit;
Image1->Picture->SaveToFile( "123-24" );
Image1->Picture->Bitmap->PixelFormat = pf8bit;
Image1->Picture->SaveToFile( "123-8" );
Image1->Picture->Bitmap->PixelFormat = pf4bit;
Image1->Picture->SaveToFile( "123-4" );
Image1->Picture->Bitmap->PixelFormat = pf1bit;
Image1->Picture->SaveToFile( "123-1" );
}
- heredity -
evergreen 님이 쓰신 글 :
: BMPImg->PixelFormat = pf24bit
: 은 단순한 대입문이 아니라 Property를 변경하는 겁니다.
: 내부에서 무슨일을 할 진 며느리도 모르죠! ^^
:
: Graphics.PAS를 대~충 보니 PixelFormat에 값을 대입하면 SetPixelFormat()가 호출되며,
: SetPixelFormat() -> CopyImage() -> GetDIBits(), SetDIBColorTable(), BitBlt(), ...
: 등의 처리를 하는 것을 보니
: 실제 Bitmap을 해당 Format으로 변환 하는 것으로 보입니다.
: 참고로 Bitmap의 Width, Height등을 변경하면 CopyImage()이 호출됩니다.
: 별 도움이 안되는 답변이라 미안합니다. --;
: - heredity -
:
: ilys4 님이 쓰신 글 :
: : 진짜 그것만으로 되나요?
: : 안에 데이타는 안바뀔꺼 같은데....
: : 8비트는 인덱스 방식 아닌가요? 24비트로 바꿀려면 팔레트 찾아서 일일이 바꿔주면 될것 같은데,
: : 진짜 그냥 BMPImg->PixelFormat = pf24bit;
: : 이것 만으로 데이타를 바꿔주는지....
: :
: : 정재훈 님이 쓰신 글 :
: : : mossmin 님이 쓰신 글 :
: : : : [질문]8bit BMP파일을 24Bit BMP파일로 변환하는 방법을 알려주세요~
: : : : 참고 자료 라도 알려 주시면 감사하겠습니다.
: : :
: : : 단순히 저장되는 포맷을 바꾸는 걸 원하시는 건가요?
: : : 아니면 영상 정보가 보간을 통해서 24bit 칼라가 되기를 원하시는 건가요?
: : :
: : : 단지 저장포맷만 바꾸시길 원하시면 간단하게
: : :
: : : BMPImg->PixelFormat = pf24bit;
: : :
: : : 지정하시고 저장하시면 됩니다.
|