Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Игры";
Текущий архив: 2007.02.11;
Скачать: [xml.tar.bz2];

Вниз

Как растянуть картинку на нужную площадь   Найти похожие ветки 

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.037 c
15-1169421881
Mr. D.
2007-01-22 02:24
2007.02.11
Установка шрифта в InnoSetup


15-1169024822
lookin
2007-01-17 12:07
2007.02.11
ICQ с телефона


4-1159698620
AlexeyT
2006-10-01 14:30
2007.02.11
Вывод арабского текста (справа-налево)


1-1166611677
DinoRay
2006-12-20 13:47
2007.02.11
TreeView Drag&Drop непонятки


2-1169561451
FIL-23
2007-01-23 17:10
2007.02.11
перевод из двоичного в десятичный?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский