Текущий архив: 2007.02.11;
Скачать: CL | DM;
ВнизКак растянуть картинку на нужную площадь Найти похожие ветки
← →
BLack Fury (2006-03-29 15:04) [0]Увожаемые мастера, нужен пример вывода картинки на поверхность в заданный прямоугольник. И при этом не использовать TDXImageList для еёхранения. Т.е нужно что-то в этом духе
...
var
image: TPicture;
begin
...
Image.loadfromfile("xxx.bmp");
image.StrechDraw(Surface, DestRect);//придумать код этой функции мне и нужно
...
Помогите!!!!!
← →
Yegorchic © (2006-03-29 15:23) [1]Может так:
...
Image.AvtoSize:=false;
Image.Strech:=true;
Image.Width:=...
Image.Heigth:=...
Или не так?
← →
BLack Fury (2006-03-29 16:23) [2]Нет не катит! Image это не компанет, а просто BitMap в памяти...
Неужели ни кто с этим не сталкивался
← →
a22 © (2006-03-29 16:43) [3]VCL - TCanvas::Draw (или StretchDraw или какая-то там еще принимающая 2 прямоугольника, я не помню),
GDI - StretchBlt, подробности в MSDN
← →
grisme © (2006-03-29 17:39) [4]можно в OpenGL растягивать. да еще и с фильтрацией)
← →
Rial (2006-03-29 19:09) [5]
procedure Interpolate(Const Bitmap:TBitMap;Const DX,DY:Single);
Var TempBitmap:TBitMap;
Z1,Z2:Single;
K,K1,K2:Single;
X1,Y1:Integer;
C:Array[0..1, 0..1, 0..2] of Byte;
Res:Array[0..2]of Byte;
X,Y:Integer;
Xp,Yp:Integer;
Xo,Yo:Integer;
Col:Integer;
BS,TBS:TBitmapStream;
W,H,TH,TW:Integer;
ptPix,ptTPix:Integer;
ptCol,ptTCol:ptVoidArray;
begin
TempBitmap:=TBitMap.Create;
TempBitmap.Width:=Round(Bitmap.Width*DX);
TempBitmap.Height:=Round(Bitmap.Height*DY);
BS:=TBitmapStream.Create(Bitmap);
TBS:=TBitmapStream.Create(TempBitmap);
Try
ptPix:=Integer(BS.Memory);
ptTPix:=Integer(TBS.Memory);
H:=Bitmap.Height;
W:=Bitmap.Width;
TH:=TempBitmap.Height;
TW:=TempBitmap.Width;
For Y:=0 to TH-1 do
For X:=0 to TW-1 do begin
Xo:=Trunc(X/DX);
Yo:=Trunc(Y/DY);
X1:=Round(Xo*DX);
Y1:=Round(Yo*DY);
For Yp:=0 to 1 do
For Xp:=0 to 1 do begin
ptCol:=Pointer(ptPix+((Xo+Yp)+(H-Yo-Yp)*W)*3);
For Col:=0 to 2 do C[Xp,Yp,Col]:=ptCol^[2-Col];
end;
For Col:=0 to 2 do begin
K1:=(C[1,0,Col]-c[0,0,Col])/DX;
Z1:=X*K1+C[0,0,Col]-X1*K1;
K2:=(C[1,1,Col]-C[0,1,Col])/DX;
Z2:=X*K2+C[0,1,Col]-X1*K2;
K:=(Z2-Z1)/DY;
Res[Col]:=Round(Y*K+Z1-Y1*K);
end;
ptTCol:=Pointer(ptTPix+(Y*TW+X)*3);
For Col:=0 to 2 do ptTCol^[Col]:=Res[2-Col];
end;
TBS.Flush(TempBitmap);
Bitmap.Assign(TempBitmap);
finally
TempBitmap.Free;
BS.Free;
end;
end;
Type TBitmapStream=Class
protected
Data:Pointer;
BMInfo:TBitMapInfo;
ImageSize:Integer;
MemDC:HDC;
public
constructor Create(Const Bitmap:TBitmap);
destructor Free;
procedure Flush(Const DestBitmap:TBitmap);
property Memory:Pointer read Data;
property DataSize:Integer read ImageSize;
end;
TBitmapRect=Class
protected
FRect:TRect;
FChildBitmap:TBitmap;
public
property Bitmap:TBitmap read FChildBitmap;
constructor Create(Const Source:TBitmap;Const ClientRect:TRect);
destructor Free(Const Dest:TBitmap);
end;
constructor TBitmapStream.Create(Const Bitmap:TBitmap);
begin
With BMinfo.bmiHeader do begin
FillChar(BMInfo,SizeOf(BMInfo),0);
biSize:=sizeof(TBitMapInfoHeader);
biBitCount:=24;
biWidth:=Bitmap.Width;
biHeight:=Bitmap.Height;
ImageSize:=biWidth*biHeight*3;
biPlanes:=1;
biCompression:=BI_RGB;
MemDC:=CreateCompatibleDC(0);
GetMem(Data,ImageSize);
GetDIBits(MemDC,BitMap.Handle,0,biHeight,Data,BMInfo,DIB_RGB_COLORS);
end;
end;
destructor TBitmapStream.Free;
begin
FreeMem(Data);
end;
procedure TBitmapStream.Flush(Const DestBitmap:TBitmap);
begin
With BMinfo.bmiHeader do
SetDIBits(MemDC,DestBitmap.Handle,0,biHeight,Data,BMInfo,DIB_RGB_COLORS);
end;
Страницы: 1 вся ветка
Текущий архив: 2007.02.11;
Скачать: CL | DM;
Память: 0.47 MB
Время: 0.053 c