Q&A

  • 이미지 파일(bmp)사이즈 변형 후 저장 어케 해요?
이미지 파일을 가져다가
var
  Bitmap: TBitmap;
  MyRect, MyOther: TRect;
begin

  MyRect := Rect(0,0,160,96);
  MyOther := Rect(0,0,256,128);
  Bitmap := TBitmap.Create;
  Bitmap.LoadFromFile('c:sample.bmp');
  Form1.Canvas.CopyRect(MyOther,Bitmap.Canvas,MyRect);
  Bitmap.Free;
256*128 사이즈의 비트맵을 만들고 싶은 건데요..
기존의 사이즈는 보시는 것과 같이. 160*96이고요..
이걸 화일로 저장 해야 하는데염..
어케 하죠?
좀 알려 주세여 ㅜㅜ;;
1  COMMENTS
  • Profile
    KDDG_ZZOM 2002.07.02 22:33
    예전에 김영대씨 홈피에서 받았던것 같아요...
    참조하세요...

    procedure TForm1.Button1Click(Sender: TObject);
    var
    Info: PBitmapInfo;
    InfoSize: Dword;//Integer;
    ImageSize: Dword;//Longint;
    Image: Pointer;
    a,b : integer;
    begin
    // 원본 그림
    //Image_src.Picture.LoadFromFile('cute.bmp');

    // 아래는 Image_src.Picture.Bitmap의 실제 높이와 폭을 구하는 예제입니다
    // 더 많은 정보를 원하시면 윈도우즈 API 도움말에서 BITMAPINFOHEADER 로
    // 검색해 보시면 아래와 같은 구조체의 정보가 있습니다
    // typedef struct tagBITMAPINFOHEADER{
    //    DWORD  biSize;
    //    LONG   biWidth;
    //    LONG   biHeight;
    //    WORD   biPlanes;
    //    WORD   biBitCount
    //    DWORD  biCompression;
    //    DWORD  biSizeImage;
    //    LONG   biXPelsPerMeter;
    //    LONG   biYPelsPerMeter;
    //    DWORD  biClrUsed;
    //    DWORD  biClrImportant;
    // } BITMAPINFOHEADER;
    // GetDIBSizes(Bitmap: HBITMAP; var InfoHeaderSize: DWord; var ImageSize: DWORD);
    GetDIBSizes(Image_src.Picture.Bitmap.Handle, InfoSize, ImageSize);
    GetMem(Info, InfoSize);
    try
       GetMem(Image, ImageSize);
       try
         GetDIB(Image_src.Picture.Bitmap.Handle, Image_src.Picture.Bitmap.Palette, Info^, Image^);
         Image_src.Width  := Info^.bmiHeader.biWidth; // 실제 폭
         Image_src.Height := Info^.bmiHeader.biHeight; // 실제 높이
       finally
         FreeMem(Image, ImageSize);
       end;
    finally
       FreeMem(Info, InfoSize);
    end;

    // 원본의 2배로 늘려본다

    a := round(Image_src.Width / 2);

    Image_dst.Width  := 28 ;
    Image_dst.Height := 12 ;

    // 크기가 변경된 그림
    Image_dst.Canvas.CopyRect(Rect(0,0, Image_dst.Width, Image_dst.Height),
                          Image_src.Canvas,
                          Rect(0, 0, Image_src.Width, Image_src.Height));
    Image_dst.Picture.SaveToFile('c:temp돈1.bmp');

    end;