Главная страница
    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.043 c
6-1157130974
KOLYA-rzn
2006-09-01 21:16
2007.02.11
Попытка написать rAdmin. Вопросы по Indy


15-1169383699
Nord
2007-01-21 15:48
2007.02.11
TComboBox


15-1169025265
Курдль
2007-01-17 12:14
2007.02.11
Как определить подлинность швейцарских часов недорогого класса?


2-1169609787
exolon
2007-01-24 06:36
2007.02.11
Помогите укротить типизированный файл.


15-1169151182
m911
2007-01-18 23:13
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский