Q&A

  • 이미지 파일의 사이즈(A4, B4...)
Bmp나 Jpg파일의 사이즈를 A4, B4등의 크기로 지정하여 저장하고자 합니다.

그런데 이게 잘 안되는군요.

아마도 리소스 문제인듯 한데...

암튼 이미지의 사이즈를 크게 해서 저장하고자 할때 좋은 방법이 있는지요?

일단 이미지의 사이즈(Width, Height)에 값을 지정(큰 값)하는 순간에

에러가 발생합니다.

여러 델피언의 조언 부탁합니다.

그럼 좋은 나날 되세요.



1  COMMENTS
  • Profile
    김영대 2000.01.13 19:13
    유도삼 wrote:

    > Bmp나 Jpg파일의 사이즈를 A4, B4등의 크기로 지정하여 저장하고자 합니다.

    > 그런데 이게 잘 안되는군요.

    > 아마도 리소스 문제인듯 한데...

    > 암튼 이미지의 사이즈를 크게 해서 저장하고자 할때 좋은 방법이 있는지요?

    > 일단 이미지의 사이즈(Width, Height)에 값을 지정(큰 값)하는 순간에

    > 에러가 발생합니다.

    > 여러 델피언의 조언 부탁합니다.

    > 그럼 좋은 나날 되세요.



    unit Unit1;



    interface



    uses

    Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

    StdCtrls, ExtCtrls;



    type

    TForm1 = class(TForm)

    Image_src: TImage;

    Image_dst: TImage;

    Button1: TButton;

    procedure Button1Click(Sender: TObject);

    private

    { Private declarations }

    public

    { Public declarations }

    end;



    var

    Form1: TForm1;



    implementation

    {$R *.DFM}



    procedure TForm1.Button1Click(Sender: TObject);

    var

    Info: PBitmapInfo;

    InfoSize: Integer;

    ImageSize: Longint;

    Image: Pointer;

    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(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배로 늘려본다

    Image_dst.Width := Image_src.Width * 2;

    Image_dst.Height := Image_src.Height * 2;



    // 크기가 변경된 그림

    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('Stretched_cute.bmp');

    end;



    end.