C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[42111] Re:Bmp 파일을 실행파일에 넣을 수는 없나요?
utime.김성하 [utime] 1093 읽음    2005-10-07 10:52
안녕하세요 utime.김성하입니다.

방법이야 많습니다.

제일 쉬운 방법으로는 폼에다가 TImage 컴포넌트 얹어 놓고 bmp파일 로딩하고난 후 컴파일 하면 됩니다.( 추천! )

음~ 아니면

난 좀더 삽질하면서 남들이 최대한 보기 어렵게 하겠다고 생각하시면

바이너리 코드를 일일히 소스에 박아 넣으시고
그걸 로딩하시면 되것지요~

컴포넌트 만들다가 생각나서 만든건데
걍 이런 삽질하는 넘도 있구나 생각하시길...

function AddData( const pbuf : PChar; const offset : integer ; const data : PChar ) : integer;
var
  iLen : integer;
begin
  iLen := Length( data );
  CopyMemory( pbuf + offset, data, iLen );
  Result := offset + iLen;
end;

procedure SetTempImage( const bmp : TBitmap );
var
  buf : pChar;
  imgStr : Char;
  memstr : TMemoryStream;
  tmpBmp : TBitmap;
  i1,
  iLen,
  offset : integer;
begin
  offset := 0;
  GetMem( buf, 1024+512);
  ZeroMemory( buf, 1024+512 );

  offset := AddData( buf, offset, '424D180200000000000036010000280000000E00');
  offset := AddData( buf, offset, '00000E0000000100080000000000E0000000120B0000120B0000400000004000');
  offset := AddData( buf, offset, '000000000000FFFFFF00FF00FF0000E7C40000E4C10000DEBD0000DBBA0000DA');
  offset := AddData( buf, offset, 'B90000D3B30000D0B10000C4A60000C1A40000C0A30000BC9F0000B89B0000AD');
  offset := AddData( buf, offset, '930001AD930001A58C00019D850001907A0001836F00017F6C0002816E000396');
  offset := AddData( buf, offset, '800005B79C000B9E870013D1B40010AE95000D8C780012B99F000E8C79001088');
  offset := AddData( buf, offset, '760022CCB2001FA08C0022A08D002FBDA6002DB09C003FE3CA0062EED90064E3');
  offset := AddData( buf, offset, 'D00073F2DF005DB3A6007CE1D1008BD9CD0092DFD300A9E4DB00B3EDE400B6EB');
  offset := AddData( buf, offset, 'E200C2F4EC00D1FBF400D1F9F30000B69B0001816E0014B9A10013A18C0044ED');
  offset := AddData( buf, offset, 'D40043BDAB0043B9A80049C8B6003DA0920072DECE00D1F4EF00E2F7F400FFFF');
  offset := AddData( buf, offset, 'FF000202023E2C3A35353A2C3E020202000002022D231A252626251A232D0202');
  offset := AddData( buf, offset, '0000022D1D05372828282837051D2D0200003E240803211E2728221C0308243E');
  offset := AddData( buf, offset, '00002B0F040319151718151603040F2B0000390E040303141515150B03040E39');
  offset := AddData( buf, offset, '0000360C060310131515341107060C360000360C091215151515151515090C36');
  offset := AddData( buf, offset, '0000390E0A0C382F1F153138330A0E3900002B0F0A0A30321F1532300A0A0F2B');
  offset := AddData( buf, offset, '00003E240D0A2A3D293B3D2A0A0D243E0000022D1B0D203C2E2E3C200D1B2D02');
  offset := AddData( buf, offset, '000002022D240F0E0C0C0E0F242D020200000202023E2B393636392B3E020202');
  offset := AddData( buf, offset, '0000');

  memstr := TMemoryStream.Create;
  memstr.Clear;
  iLen := Length( buf ) div 2;

  offset := 0;
  for i1:=0 to Pred(iLen) do
  begin
    imgStr := char( StrToInt( '$' + String(buf[offset]) + String(buf[offset+1]) ) );
    Inc( offset, 2 );
    memstr.Write(imgStr, sizeof(char));
  end;
  FreeMem( buf );
  memstr.Position := 0;

  tmpBmp := TBitmap.Create;
  try
    tmpBmp.LoadFromStream( memstr );
  except
    FreeAndNil( memstr );
    FreeAndNil( tmpBmp );
    Exit;
  end;
  FreeAndNil( memstr );

  bmp.Canvas.Draw((bmp.Width-tmpBmp.Width)div 2,(bmp.Height-tmpBmp.Height)div 2, tmpBmp);
//  bmp.SaveToFile( 'c:\aaa.bmp' );  // 테스트로
  FreeAndNil( tmpBmp );
end;

요렇게 하면 이쁘고 작은 bmp이미지가 생긴다죠~?
참~ 이 bmp는 다른곳에서 사용하시면 안됩니다.


즐프하세요~


alberddo 님이 쓰신 글 :
: m_pBitmap->LoadFromFile(ExtractFileDir(Application->ExeName)+"\\Picture.bmp");
: 와 같은 방법으로 프로그램에서 사용중인데 방법을 바꿔서
: Picture.bmp파일을 실행파일 안에 넣을 수는 없나요?
: 가능한지, 불가능한 건지 알고 싶습니다.

+ -

관련 글 리스트
42110 Bmp 파일을 실행파일에 넣을 수는 없나요? alberddo 730 2005/10/07
42111     Re:Bmp 파일을 실행파일에 넣을 수는 없나요? utime.김성하 1093 2005/10/07
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.