Форум: "Начинающим";
Текущий архив: 2013.12.15;
Скачать: [xml.tar.bz2];
ВнизБиблиотека Fastlib, изменеие размеров изобр. Найти похожие ветки
← →
alexdn © (2013-03-01 17:20) [0]Если изменять размеры изображения из файла, то вообщем понятно:
Var Src,Dst:TFastDIB;
begin
Src.LoadFromFile("aaa.bmp");
Dst.SetSize(300, 200, Src.Bpp);
Bilinear(Src, Dst);
а вот если Src нужно связать с image1? loadfrom что писать?
← →
clickmaker © (2013-03-01 17:23) [1]> loadfrom что писать?
Handle?
← →
alexdn © (2013-03-01 17:25) [2]> clickmaker © (01.03.13 17:23) [1]
> Handle?
Src.LoadFromHandle(image1); пишет
[DCC Error] Unit1.pas(39): E2010 Incompatible types: "HBITMAP" and "TImage"
← →
clickmaker © (2013-03-01 17:30) [3]ну нельзя же настолько лениться... в хелп-то заглядывать надо иногда?
Image1.Picture.Bitmap.Handle
← →
alexdn © (2013-03-01 17:55) [4]> clickmaker © (01.03.13 17:30) [3]
Вот так что ли? Src.LoadFromHandle(Image1.Picture.Bitmap.Handle); что то делфи вроде компилит, но не переваривает..
← →
clickmaker © (2013-03-01 18:03) [5]> но не переваривает
дай ей мезим
← →
Sapersky (2013-03-01 18:46) [6]Не работает, когда в TImage jpeg или другая экзотика.
Я TImage мало использовал и не в курсе, как его нужно пнуть, чтобы он распаковал jpeg в Picture.Bitmap. По идее должен уметь, как-то он рисует картинку, а прямо из jpeg это невозможно.
Можно сделать наоборот - грузить в TFastDIB, отображать в TImage:
Image.Picture.Bitmap.Handle := Src.Handle;
Src.FreeHandle := False;
Image.Refresh;
← →
AlexDn © (2013-03-01 19:18) [7]Вот так сейчас, а выбивает уже внутри фастовских библиотек -
procedure TForm1.Button1Click(Sender: TObject);
begin
image1.Picture.LoadFromFile("vg.bmp");
end;
procedure TForm1.Button2Click(Sender: TObject);
Var Src,Dst:TFastDIB;
begin
//Src.LoadFromFile("aaa.bmp");
Src.LoadFromHandle(Image1.Picture.Bitmap.Handle);
Dst.SetSize(300, 200, Src.Bpp);
Bilinear(Src, Dst); //
end;
← →
clickmaker © (2013-03-01 19:50) [8]а TFastDIB.Create не надо делать?
← →
Sapersky (2013-03-01 19:50) [9]Ну не знаю, с битмапом у меня всё работает.
Посмотри в отладчике Width/Height картинки после LoadFromHandle, нормальные или нет.
Можно ещё брать картинку из Image так:
Var b : TBitmap;
b := Image1.Picture.Bitmap;
b.PixelFormat:=pf24Bit;
Src.SetInterface(b.ScanLine[b.Height-1], b.Width, b.Height, 24, 0, 0, 0);
Src.FreeBits:=False;
← →
alexdn © (2013-03-02 07:36) [10]Пока остановился на таком, код прокручивает, но ровным счётом ничего на форме не происходит..
procedure TForm1.Button2Click(Sender: TObject);
Var Src,Dst:TFastDIB;
begin
//Src.LoadFromFile("aaa.bmp");
Src:=TFastDIB.Create;
Dst:=TFastDIB.Create;
Src.LoadFromHandle(Image1.Picture.Bitmap.Handle);
Dst.SetSize(300, 200, Src.Bpp);
Bilinear(Src, Dst); // или SmoothResize Bilinear
Src.Free;
Dst.Free;
Application.ProcessMessages;
end;
← →
brother © (2013-03-02 08:08) [11]> ничего на форме не происходит
и не произойдет, тк
> Src.LoadFromHandle(Image1.Picture.Bitmap.Handle);
только грузим
> Bilinear(Src, Dst); // или SmoothResize Bilinear
после преобразованиия НИЧЕГО НЕ ДЕЛАЕМ ДАЛЬШЕ и освобождаем СРАЗУ ресурсы...
← →
alexdn © (2013-03-02 08:12) [12]> brother © (02.03.13 08:08) [11]
> после преобразованиия НИЧЕГО НЕ ДЕЛАЕМ ДАЛЬШЕ и освобождаем
> СРАЗУ ресурсы...
Я думал сделать что то вроде Src.SavetoHandle, но пока ничего придумать не могу..
← →
brother © (2013-03-02 08:34) [13]что тогда говоришь, что ничего не происходит???
← →
alexdn © (2013-03-02 09:14) [14]> brother © (02.03.13 08:34) [13]
Ну вот же, пока ничего не могу придумать, SavetoHandle не работает, нет такого слова.
← →
clickmaker © (2013-03-02 12:17) [15]Dst.Draw(Image1.Picture.Bitmap.Canvas, 0, 0)
← →
alexdn © (2013-03-02 12:55) [16]> clickmaker © (02.03.13 12:17) [15]
Dst.Draw(Image1.Picture.Bitmap.Canvas, 0, 0) Говорит несоответствие типов HDC и TCanvas.
← →
clickmaker © (2013-03-02 13:08) [17]как с тобой тяжело... справку читай
← →
alexdn © (2013-03-02 13:13) [18]
Var Src,Dst:TFastDIB;
begin
//Src.LoadFromFile("aaa.bmp");
Src:=TFastDIB.Create;
Dst:=TFastDIB.Create;
Src.LoadFromHandle(Image1.Picture.Bitmap.Handle);
Dst.SetSize(300, 200, Src.Bpp);
Bilinear(Src, Dst); // или SmoothResize Bilinear
Dst.Draw(Image1.Picture.Bitmap.Handle, 0, 0);
Src.Free;
Dst.Free;
Application.ProcessMessages;
end;
← →
alexdn © (2013-03-02 13:13) [19]Опять же, всё прокручивается, но ничего не меняется..
← →
clickmaker © (2013-03-02 13:15) [20]> Dst.Draw(Image1.Picture.Bitmap.Handle, 0, 0)
смотрим в справку - видим фигу?
Bitmap.Canvas.Handle
← →
alexdn © (2013-03-02 13:21) [21]Снова ничего не меняется
Var Src,Dst:TFastDIB;
begin
//Src.LoadFromFile("aaa.bmp");
Src:=TFastDIB.Create;
Dst:=TFastDIB.Create;
Src.LoadFromHandle(Image1.Picture.Bitmap.Handle);
Dst.SetSize(300, 200, Src.Bpp);
Bilinear(Src, Dst); // или SmoothResize Bilinear
Dst.Draw(Image1.Picture.Bitmap.Canvas.Handle, 0, 0);
Src.Free;
Dst.Free;
Application.ProcessMessages;
end;
← →
alexdn © (2013-03-02 13:36) [22]Видно чего то не хватает..
← →
clickmaker © (2013-03-02 13:51) [23]> чего то не хватает
умения пользоваться отладчиком
← →
alexdn © (2013-03-02 14:17) [24]Да вот он вообщем то весь проект, всё отрабатывается, переходы на процедуры FastLib тоже, но на форме размер рисунка не меняется, значит всё таки чего то не хватает -
procedure TForm1.Button1Click(Sender: TObject);
begin
image1.Picture.LoadFromFile("vg.bmp");
end;
procedure TForm1.Button2Click(Sender: TObject);
Var Src,Dst:TFastDIB;
begin
//Src.LoadFromFile("aaa.bmp");
Src:=TFastDIB.Create;
Dst:=TFastDIB.Create;
Src.LoadFromHandle(Image1.Picture.Bitmap.Handle);
Dst.SetSize(60, 50, Src.Bpp);
Bilinear(Src, Dst); // или SmoothResize Bilinear
Dst.Draw(Image1.Picture.Bitmap.Canvas.Handle, 0, 0);
Src.Free;
Dst.Free;
//Application.ProcessMessages;
end;
← →
clickmaker © (2013-03-02 14:25) [25]Для Bilinear ресайзинга Bpp должен быть как минимум 8
← →
alexdn © (2013-03-02 14:33) [26]Сколько замечательных слов, вот эти 3 особенно непонятно - Bilinear ресайзинга Bpp..
← →
clickmaker © (2013-03-02 14:42) [27]> вот эти 3 особенно непонятно
то есть пишем код, даже не понимая, что пишем?
← →
alexdn © (2013-03-02 14:46) [28]Да нет, вообщем понимаем, кол-во пикселей, методы и всё такое. Но [25] совсем не понято.
← →
clickmaker © (2013-03-02 14:52) [29]> кол-во пикселей
это называется "понимаем"?
← →
alexdn © (2013-03-02 15:01) [30]Метод Bilinear выбран почти наобум, как самый точный, поставил Bilinear8(Src, Dst); но ничего не изменилось, да и надо то хоть как то картинку сжать и всё.
← →
alexdn © (2013-03-02 15:10) [31]Ну не совсем хоть как то, желательно чтоб тонкие линии не глотались, поэтому и приходится FastLib дёргать, потому как Stretch не справляется.
← →
clickmaker © (2013-03-02 15:35) [32]мне, никогда до этого не использовавшего фастдиб, понадобилось 10 мин, чтобы разобраться
Src := TFastDIB.Create;
Dst := TFastDIB.Create;
try
Src.LoadFromHandle(Image1.Picture.Bitmap.Handle);
Dst.SetSize(300, 200, Src.Bpp); // Src.Bpp must be >= 8
Dst.Colors := Src.Colors;
Dst.UpdateColors;
Bilinear(Src, Dst);
Dst.FreeHandle := false;
Image2.Picture.Bitmap.Handle := Dst.Handle;
Image2.Refresh;
finally
Src.Free;
Dst.Free;
end;
← →
clickmaker © (2013-03-02 15:44) [33]впрочем, на фастдибе свет клином не сошелся
Image2.Picture.Bitmap := TBitmap.Create;
Image2.Picture.Bitmap.Width := 300;
Image2.Picture.Bitmap.Height := 200;
Image2.Picture.Bitmap.PixelFormat := Image1.Picture.Bitmap.PixelFormat;
SetStretchBltMode(Image2.Picture.Bitmap.Canvas.Handle, HALFTONE);
StretchBlt(Image2.Picture.Bitmap.Canvas.Handle, 0, 0,
Image2.Picture.Bitmap.Width,
Image2.Picture.Bitmap.Height,
Image1.Picture.Bitmap.Canvas.Handle, 0, 0,
Image1.Picture.Bitmap.Width, Image1.Picture.Bitmap.Height, SRCCOPY);
Image2.Refresh;
← →
alexdn © (2013-03-02 16:29) [34]> clickmaker © (02.03.13 15:35) [32]
мне больше, вот как раз тут рекламируют то для чего это всё грызлось, вот такая ирония судьбы - http://s018.radikal.ru/i508/1303/86/2e616ec2bb44.png
← →
знайка (2013-03-02 17:20) [35]
> вот как раз тут рекламируют
корликов там разводят.
← →
Sapersky (2013-03-02 18:27) [36]Для сохранения мелких деталей при уменьшении лучше StretchBlt c HalfTone, т.е. [33].
http://sapersky.narod.ru/files/ResizeTest_exe.rar
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2013.12.15;
Скачать: [xml.tar.bz2];
Память: 0.53 MB
Время: 0.003 c