![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Изменить размер изабражения? [D6, D7, WinXP]
Ivolg © (2004-05-30 16:08:00)Как можно с помошью TImage уменьшить рисунок на 48*48 и в таком размере(48*48) сохранить! Пожайлусто помогите! СПАСИБО!
Alexander_K (2004-06-10 14:42:00) [1]На вот тебе тот же самый пример что и на C++
procedure TForm1.SpeedButton1Click(Sender: TObject);
var
Prn: TPrinter;
MDC: HDC;
MBMP: HBITMAP;
PR, MR: TRect;
C: TCanvas;
begin
if PrintDialog.Execute then
try
Prn := Printer;
Prn.BeginDoc;
MDC := CreateCompatibleDC(Prn.Canvas.Handle);
C := TCanvas.Create;
C.Handle := MDC;
MBMP := CreateCompatibleBitmap(Prn.Canvas.Handle, Image.Width, Image.Height);
SelectObject(MDC, MBMP);
ScrollBox.PaintTo(MDC, 0, 0);
SetRect(MR, 0, 0, Image.Width, Image.Height);
SetRect(PR, 0, 0, Prn.PageWidth, Prn.PageHeight);
Prn.Canvas.CopyRect(PR, C, MR);
Prn.EndDoc;
finally
DeleteDC(MDC);
DeleteObject(MBMP);
C.Free;
end;
end;
Под себя переделаешь сам.
Alexander_K (2004-06-10 12:41:00) [2]Ivolg (10.06.04 10:33) [13]
Получается пустая картинка да?
Я же тебе говорю, там надо создавать Девайс контекст, то есть CreateCompatibleDC и CreateCompatibleBitmap - смотри в моем предыдущем примере.
Или если хочешь можешь посмотреть как в исходниках реализовано у TWinControl.WMPaint
В моем примере как раз все оттуда взято (только у меня на C++Builder написано, но по аналогии можно догадаться)
Ivolg (2004-06-10 10:33:00) [3]Я сделал по совету [9]. У меня не вышло.Вот код:
image2.Picture.LoadFromFile('D:\1.bmp');
image1.Canvas.StretchDraw(image2.Canvas.ClipRect,image2.Picture.Graphic);
image1.Picture.SaveToFile('d:\2.bmp');
Alexander_K (2004-06-09 17:54:00) [4]Вот тебе код, правда написанный на C++Builder. На Делфи сам переведешь. Продцедура делает следующее: С фрейма сдирает все в канвас tmp, а потом печатает на принтер, но уже с размерами для принтера.
HDC MDC;
HBITMAP MBMP;
TPrinter *prt = Printer();
TCanvas *tmp = new TCanvas;
try
{
prt->BeginDoc();
TRect MR = Rect(0,0,Frame11->Image1->Width,Frame11->Image1->Height);
TRect PR = Rect(0,0,Frame11->Image1->Width * prt->PageWidth / Frame11->Image1->Width,Frame11->Image1->Height * prt->PageWidth / Frame11->Image1->Width);
MDC = CreateCompatibleDC(prt->Canvas->Handle);
// MDC = CreateCompatibleDC(0);
tmp->Handle = MDC;
MBMP = CreateCompatibleBitmap(prt->Canvas->Handle, Frame11->Image1->Width, Frame11->Image1->Height);
SelectObject(MDC, MBMP);
Frame11->PaintTo(MDC,0,0);
prt->Canvas->CopyRect(PR, tmp, MR);
prt->EndDoc();
}
__finally
{
DeleteDC(MDC);
DeleteObject(MBMP);
delete tmp;
}
[BAD]Angel (2004-06-09 16:07:00) [5]когда-то я это делал... хотел заставить принтер печататьлучше! как ни странно StrechDraw помог :)
Weber (2004-06-09 16:04:00) [6]
> 4. Далее Image1.StretchDraw(Image2).
То есть Image1.Canvas.StretchDraw...
Weber (2004-06-09 16:01:00) [7]1. Кидаешь на форму 2 TImage.
2. Устанавливаешь у одного из них Image1 размеры 48х48.
3. В другой Image2, при выполнении программы, LoadFromFile.
4. Далее Image1.StretchDraw(Image2).
5. Image1.SaveToFile.
Всё.
ЗЫ. Звоните поможем!
ЗЫ2. Без паники, пожалуйста!
:))))
Ivolg (2004-06-09 15:53:00) [8]Всё равно не помогает
Chlavik (2004-06-09 01:31:00) [9]Надо просто заюзать свойство Stretch
Ivolg (2004-06-08 19:45:00) [10]НУ кто нибудь? ПОМОГИТЕ!!!!!!!! ПОЖЙЛУСТА!!!!!!!!!!!
Ivolg (2004-05-31 20:09:00) [11]Всё равно не помогает!
Ozone (2004-05-31 08:17:00) [12]А пример Delphi не судьба посмотреть?
var
Bitmap: TBitmap;
MyRect, MyOther: TRect;
begin
MyRect := Rect(10,10,100,100);
MyOther := Rect(10,111,100, 201);
Bitmap := TBitmap.Create;
Bitmap.LoadFromFile('c:\windows\tartan.bmp');
Form1.Canvas.BrushCopy(MyRect,Bitmap, MyRect, clBlack);
Form1.Canvas.CopyRect(MyOther,Bitmap.Canvas,MyRect);
Bitmap.Free;
end;
Ivolg (2004-05-31 07:52:00) [13]Я делаю так:
image1.Picture.Bitmap.LoadFromFile('d:\1.bmp');
image1.Picture.Bitmap.Height:=48;
image1.Picture.Bitmap.Width:=48;
тут надо использовать Canvas.CopyRect,а я незнаю как? Помогите!! СПАСИБО!
image1.Picture.Bitmap.SaveToFile('D:\2.bmp');
Ivolg (2004-05-30 17:23:00) [14]TUser
А пример можно! А то чёто не получается
TUser (2004-05-30 16:48:00) [15]TBitMap, Width, Height, Canvas.CopyRect, SaveToFile.