![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как вывести фото на 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;
результат тот же.. (((