Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.49 MB
Время: 0.053 c
15-1169191954
Priest
2007-01-19 10:32
2007.02.11
Выбор винта на ноут


2-1169715577
user51
2007-01-25 11:59
2007.02.11
путь е екзешнику по окну


15-1169399612
koha
2007-01-21 20:13
2007.02.11
Как на форуме относятся к бесплатному и ПО за дениги


2-1169596319
rosl
2007-01-24 02:51
2007.02.11
IBUpdate


15-1169200210
RebroFF
2007-01-19 12:50
2007.02.11
Блок-схемы