Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2013.12.15;
Скачать: CL | DM;

Вниз

Библиотека 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;
Скачать: CL | DM;

Наверх




Память: 0.55 MB
Время: 0.008 c
15-1370955205
картман
2013-06-11 16:53
2013.12.15
моноблок


15-1371318144
DVDRe
2013-06-15 21:42
2013.12.15
чтение запорченного ДВД


1-1319444356
de_guta
2011-10-24 12:19
2013.12.15
не выполняется обработчик OnClose формы


15-1371760203
Юрий
2013-06-21 00:30
2013.12.15
С днем рождения ! 21 июня 2013 пятница


2-1362042401
Денис-Редис
2013-02-28 13:06
2013.12.15
Получить имена модулей дочерних потоком