Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
2-1362026993
Jimmy
2013-02-28 08:49
2013.12.15
Доступ к объектам метафайла


15-1372019403
Юрий
2013-06-24 00:30
2013.12.15
С днем рождения ! 24 июня 2013 понедельник


15-1372278603
Юрий
2013-06-27 00:30
2013.12.15
С днем рождения ! 27 июня 2013 четверг


15-1370961930
Excel Master
2013-06-11 18:45
2013.12.15
Excel VBA


15-1372105803
Юрий
2013-06-25 00:30
2013.12.15
С днем рождения ! 25 июня 2013 вторник





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский