이미지 파일을 가져다가
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이고요..
이걸 화일로 저장 해야 하는데염..
어케 하죠?
좀 알려 주세여 ㅜㅜ;;
참조하세요...
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;