Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как вывести фото на Image? (Delphi XE, Android) [D7, XP]


Антонов Саша ©   (2016-07-14 09:47:00) 

Здравствуйте! Хочу научиться вывести фото на компонент Image. Нашел пример на сайте Эмбаркадеро http://docwiki.embarcadero.com/CodeExamples/Berlin/en/FMXTCanvasDrawFunctions_(Delphi), немножко переделал для себя:
var
 MyBitmap: TBitmap;
 MyRect: TRectF;
begin
 MyBitmap := TBitmap.CreateFromFile('c:\myphoto.jpg');
 MyRect := TRectF.Create(50, 30, 150, 200);
 Image1.Bitmap.Canvas.BeginScene;
 Image1.Bitmap.Canvas.DrawBitmap(MyBitmap, MyRect, MyRect, 20);
 Image1.Bitmap.Canvas.EndScene;
end;

Поставил на событие OnShow формы(чтобы загружалоcь cразу при запуске), но получаю в итоге лишь белый экран телефона. Что делаю не так?


Антонов Саша   (2016-07-14 22:32:00) [1]

Решил задачку по своему, рисую на Bitmap, потом присваиваю его Image.. ))
оч.быстро работает! если бы рисовал на Image, наверное было бы медленее...


Антонов Саша   (2016-07-14 17:26:00) [2]

на OnPaint формы и перерисовывал все, добавишь еще что-то, старое изображение исчезнет, чтобы этого не случилось рисовал повторно старое и рядом новое,оч.неудобно.. В Image/PaintBox вроде должно запоминать старое без повторной отрисовки, но пока не получается ничего в  них вывести... ((
Еще блин эти ограничения с форматами.. На канве формы из ресурсов(потока) рисует jpg,bmp,png без проблем...


Антонов Саша   (2016-07-14 17:26:00) [3]

на OnPaint формы и перерисовывал все, добавишь еще что-то, старое изображение исчезнет, чтобы этого не случилось рисовал повторно старое и рядом новое,оч.неудобно.. В Image/PaintBox вроде должно запоминать старое без повторной отрисовки, но пока не получается ничего в  них вывести... ((
Еще блин эти ограничения с форматами.. На канве формы из ресурсов(потока) рисует jpg,bmp,png без проблем...


Kilkennycat   (2016-07-14 17:15:00) [4]


> (Но работать с формой неудобно, постоянно приходится перерисовывать)

а что, у формы нет события onPaint?


Антонов Саша   (2016-07-14 17:08:00) [5]

>sniknik Про модуль Jpeg незнаю, беру фото из ресурсов через поток.
На канве формы рисует, а на Image/Paintbox нивкакую... ((
(Но работать с формой неудобно, постоянно приходится перерисовывать)


sniknik   (2016-07-14 16:58:00) [6]

а в Delphi XE есть модуль Jpeg? как в D7:
uses
 Jpeg;

  Image1.Picture.LoadFromFile('c:\myphoto.jpg');

ну, или что там вместо "c:"
не работает?


Антонов Саша   (2016-07-14 16:40:00) [7]

Как ни парадоксально, но справка иногда бесполезная вещь. Я вот вроде как рабочий там взял пример с битмепом, но всеравно не пашет.. ((


Антонов Саша   (2016-07-14 15:52:00) [8]

)) ясно, буду дальше гуглить... Может найду раб.пример...


Kilkennycat   (2016-07-14 15:28:00) [9]


> Можно пример работы с PaintBox и битмап? Особо интересует
> при каких событиях, что нужно делать(отрисовка, обновление)?
>  Какие форматы можно отрисовывать?

то есть напечатать здесь справку из Делфи?


Антонов Саша   (2016-07-14 15:09:00) [10]

Можно пример работы с PaintBox и битмап? Особо интересует при каких событиях, что нужно делать(отрисовка, обновление)? Какие форматы можно отрисовывать? Как вывести png-формат с прозрачностью? Скачал книгу Осипова о программировании для Андроида, но там все оч.коротко и примеров мало.. ((


Kilkennycat   (2016-07-14 14:46:00) [11]


> PaintBox


Антонов Саша   (2016-07-14 11:19:00) [12]

Но с формой неудобно работать в каждом OnPaint прийдется все заново рисовать. Нужен компонент в котором нарисовал и забыл, потом еще дорисовал если надо. Наверно Image больше подойдет для этого или PaintBox?


Антонов Саша   (2016-07-14 11:11:00) [13]

Заменил фото на bmp-формат, в результате приложение закрывается сразу
после запуска на телефоне. Попробовал рисовать на канве формы, при событии  OnPaint, все работает независимо от формата, даже png  фото читает. А вот с отрисовкой на канве Image непонятка... ((


yui   (2016-07-14 11:05:00) [14]

если народ пишет, то почему бы не попробовать имадж битмап загрузить из mp4  с финальным матчем евро-2016?

по идее имадж должен и видос показать.

лоад же фром стрим, все дела, народ пишет....


Антонов Саша   (2016-07-14 11:01:00) [15]

Вычитал в интернете что народ напрямую пишет в Image: Image1.Bitmap.LoadFromStream(risunok);
но этот вариант не подходит так-как нужно пару фоток прочитать из ресурсов
и разместить в разных местах одного Image, типа галерею фото сделать.. ))


yui   (2016-07-14 11:00:00) [16]

имадж битмап хочет битмап (бмп)
а ты ему суешь левый жпег

это не будет работать не только лишь в андроиде. мало где это будет работать


Антонов Саша   (2016-07-14 10:52:00) [17]

Переделал, теперь беру фото из потока, предварительно загрузив его в ресурсы, но результат тот же.. ((

var
ABitmap:TBitmap;
aWidth,aHeight:integer;
SrcRect, DstRect: TRectF;
rs_img: TResourceStream;
Image : TImage;
begin
with Form1.Image1.Bitmap.Canvas do
begin
if FindResource(0, 'MyPhoto', PChar(RT_RCDATA)) <> 0 then rs_img:=TResourceStream.Create(0,'MyPhoto',PChar(RT_RCDATA));
Image := TImage.Create(nil);
Image.BitMap := TBitMap.Create(0, 0);
Image.BitMap.LoadFromStream(rs_img);
ABitmap:=Image.BitMap;
aWidth:=ABitmap.Width;
aHeight:=ABitmap.Height;
SrcRect:=RectF(0,0,aWidth,aHeight);
DstRect:=RectF(x,y,aWidth+x,aHeight+y);
if BeginScene then
begin
DrawBitmap(ABitmap,SrcRect,DstRect, 1, True);
EndScene;
Image.Free;
rs_img.Free;
end;    
end;
end;


yui   (2016-07-14 10:38:00) [18]

все давно знают, что в ведроиде нету диска "це"

есть только диск "ф" (флешка)
и иногда диск "ы" (ыкстернал флешка)


Игорь Шевченко   (2016-07-14 10:18:00) [19]


> но получаю в итоге лишь белый экран телефона


А в андроиде на телефоне точно есть


> 'c:\myphoto.jpg'


?


Антонов Саша   (2016-07-14 09:53:00) [20]

еще добавил такие строки:

procedure TForm1.FormCreate(Sender: TObject);
begin
 Image1.Bitmap.SetSize(Round(Image1.Width), Round(Image1.Height));
 Image1.Bitmap.Clear(TAlphaColors.White);
end;
результат тот же.. (((


Наверх

Титульная страница Поиск, карта сайта Написать письмо