Перейти к содержанию
Fire Monkey от А до Я

Поиск сообщества

Показаны результаты для тегов 'TBitmap'.

  • Поиск по тегам

    Введите теги через запятую.
  • Поиск по автору

Тип контента


Форумы

  • Общие вопросы
    • Анимация
    • Графика
    • Стили
    • Базы данных и REST
    • Компоненты
    • Положение, размеры, выравнивание
    • Работа с текстом
    • Приложение и формы
    • Отладка
    • Развертывание приложений
    • Вопросы по языку Object Pascal и RTL
    • Общая информация о TControl
    • События
    • Прочие вопросы
  • Вопросы по платформам
    • Android
    • iOS
    • OSX
    • Windows
    • Windows Phone
    • Linux
  • Вопросы по использованию RAD Studio
    • Лицензирование
    • Сборка проектов
    • Multi-Device Designer
    • Редактор кода
    • Вопросы
  • Обучение
    • Основная информация
    • Вопросы
    • Отзывы
  • Поиск специалистов по FireMonkey
    • Консультации
    • Ищу подрядчика
  • Дополнительные ресурсы по FireMonkey
    • Сторонние компоненты
    • Приложения, написанные с использованием FireMonkey
    • Примеры
    • Руководства
    • Шаблоны
    • Статьи и заметки
    • Информация о версиях RAD Studio
    • Новости
  • Организация работы данного форума

Поиск результатов в...

Поиск контента, содержащего...


Дата создания

  • Начало

    Конец


Дата обновления

  • Начало

    Конец


Фильтр по количеству...

Регистрация

  • Начало

    Конец


Группа


AIM


MSN


Сайт


ICQ


Yahoo


Jabber


Skype


StackOverflow


Защита от ботов


Город


Интересы

  1. Всем здравствуйте, и мое почтение! Возникла сильная необходимость передать объект JImage в so-библиотеку, написанную на c++ Суть - нужно передать изображение в библиотеку распознавания лиц и ориентации головы. В библиотеке есть функция, объявленная так: jint JNIEXPORT JNICALL DLIB_JNI_METHOD(jniBitmapExtractFaceGazes)(JNIEnv* env, jobject thiz, jobject bitmap) {...} В Delphi я описал эту функцию следующим образом: var jniExtractGazes : function(PVM: PJNIEnv; Reserved: Pointer; bitmap: JObject): INT; cdecl; Гружу/ищу ее так: function HPELoadLibrary: boolean; var lJNIInt : JNIInt; begin Result := False; HPEMode := MODE_ITERATIVE; {$IFDEF ANDROID} HPEDocDir := IncludeTrailingPathDelimiter(System.IOUtils.TPath.GetDocumentsPath); {$ELSE} exit; {$ENDIF} HPELibraryHandle := LoadLibrary(PChar(HPEDocDir + 'libhead_pose_det.so')); if ( HPELibraryHandle = 0 ) then Exit; PEnv := TJNIResolver.GetJNIEnv; PVM := PJavaVM(System.JavaMachine); if HPELibraryHandle <> 0 then begin @OnLoadFunc := GetProcAddress(HPELibraryHandle, 'JNI_OnLoad'); if not Assigned(OnLoadFunc) then begin FreeLibrary(HPELibraryHandle); Exit; end; lJNIInt := OnLoadFunc(PVM, nil); @jniInit := GetProcAddress(HPELibraryHandle, 'Java_com_beraldo_hpe_dlib_HeadPoseDetector_jniInit'); //jniInit @jniDeInit := GetProcAddress(HPELibraryHandle, 'Java_com_beraldo_hpe_dlib_HeadPoseDetector_jniDeInit'); //jniDeInit @jniExtractGazes := GetProcAddress(HPELibraryHandle, 'Java_com_beraldo_hpe_dlib_HeadPoseDetector_jniBitmapExtractFaceGazes'); Result := True; end; end; Адреса всех функций находятся, jniInit и OnLoadFunc отрабатывают корректно. Проблема с функцией jniExtractGazes. function HPEDetect(ABitmap: TBitmap): INT; var lBitmap : jBitmap; begin result := 0; if ( HPELibraryHandle = 0 ) then exit; lBitmap := BitmapToJBitmap(ABitmap); result := jniExtractGazes(PEnv, nil, lBitmap); <===== Project FaceLockClientMobile.apk raised exception class Aborted (6). end; На указанной строке всегда вылетает Exception Aborted. Стек ничего внятного не показывает. Путем долгих проб и ошибок прихожу к подозрению что я неправильно передаю Java-объект в библиотеку. Как его передавать из Дельфи правильно - не могу найти. Буду очень признателен за любые подсказки и догадки. PS речь идет о этой библиотеке: https://github.com/beraldofilippo/android-hpe-library
  2. Для одного своего проекта сделал, поделюсь, вдруг кому пригодится. Тестировал под Windows и Android. Для использования просто добавьте BitmapAsyncLoader в uses, а дальше все просто: ImageControl.Bitmap.LoadFromURLAsync('https://bipbap.ru/wp-content/uploads/2017/10/0_8eb56_842bba74_XL-640x400.jpg'); Код юнита хелпера: unit BitmapAsyncLoader; interface uses FMX.Graphics, System.Net.HttpClient, System.Types, System.Classes; type TBitmapAsyncLoader = class helper for TBitmap procedure LoadFromUrlAsync(const AUrl : String); end; implementation var AHTTPClient : THTTPClient; procedure TBitmapAsyncLoader.LoadFromURLAsync(const AURL : String); begin try AHTTPClient.BeginGet( procedure (const ASyncResult: IAsyncResult) var AHTTPResponse : IHTTPResponse; begin if Not ASyncResult.IsCompleted then exit; try AHTTPResponse:=THTTPClient.EndAsyncHTTP(ASyncResult); except end; if Assigned(AHTTPResponse) and (AHTTPResponse.StatusCode = 200) then TThread.Synchronize(Nil, procedure begin try Self.LoadFromStream(AHTTPResponse.ContentStream); except end; end ); end, AURL ); except end; end; initialization AHTTPClient:=THTTPClient.Create; finalization if Assigned(AHTTPClient) then begin AHTTPClient.DisposeOf; end; end. Архив с тестовым проектом прилагаю. BitmapAsyncLoader.7z
  3. Здравствуйте! Начал изучать FireMonkey и столкнулся с тем, что TBitmap не поддерживает размер изображения больше 8132, кажется. Т.е. большие размеры рисунка он грузит, но за счёт потери качества, размер пиксела растёт, а размер рисунка по оси всё равно не превышает 8132. В то же время в простом дельфи можно грузить и работать с гораздо большими размерами, например, один из файлов имеет размер 61216 х 1486 точек. Подскажите пожалуйста, есть ли возможность работать с большими файлами в FireMоnkey и как это можно организовать? Программа создаётся для работы только в Windows.
  4. Tot999

    TPaintox+Tbitmap

    Добрый день! Решил покопаться в своей старой спрайтовой игрушке, чтобы освежить в памяти знания и состряпать что-нибудь новое. Возникли сомнения, нормально ли сделано графическое отображение, можно ли доработать. Все спрайты в дизайнтайме распиханы по Timagelist-ам. На старте приложения я загружаю битмапы из имэджлистов в свои обджектлисты, подгоняя под нужный размер. MeduzasBitmpAr : array [1..numofMeduzas] of TObjectList<Tbitmap>; Дальше рисую по таймеру в основном окне игры Tpaintbox.OnPaint: В принципе, даже на слабеньких телефончиках, всё вроде бодро. Но может, опытные товарищи чего подскажут, а то я 3ий день в собственном соку варюсь, ничего толкового.
  5. x11

    TBitmapImage -> TBitmap

    Можно ли получить TBitmap из TBitmapImage? Конвертировать.
  6. Пишу кроссплатформенное приложение. Результат поиска отображается в TGrid. Стал вопрос отображения картинки в одной из колонок. На Windows все ок, но на планшете происходят просто чудеса: при первом отображение все корректно, но если простоколить вверх-вниз как картинки одни перетираются другими, часть вообще отображается вверх ногами. Код для сохранение картинки(jpg) в базу: if Assigned(sm) then begin sm.Position := 0; //TBlobField(dmData.cdsPlayerData.FieldByName('Photo')).LoadFromStream(sm); vImage := TImage.Create(nil); try sm.Position := 0; vImage.Bitmap.LoadFromStream(sm); vKoef := vImage.Bitmap.Height / 64; vImage.Bitmap.Resize(Trunc(vImage.Bitmap.Width / vKoef), Trunc(vImage.Bitmap.Height / vKoef)); sm.Free; sm := TMemoryStream.Create(); try vImage.Bitmap.SaveToStream(sm); TBlobField(dmData.cdsPlayerData.FieldByName('SmallPhoto')).LoadFromStream(sm); finally sm.Free; end; finally vImage.Free; end; end{if}; До скрола: После скрола: Пробовал и LiveBinding, и ручную прорисовку - результат один и тот же. Есть идеи что не так? P.S. Знаю что нужно делать через TListView, но заказчик хочет «сеточку как в старой программе», так как на android будет работать только на планшетах – я согласился.
  7. Здравствуйте! Стоит задача загружать фотографии и отображать их в списке. Казалось бы, как два пальца, но... Код работал долгое время, все грузилось и отображалось. Спустя какое-то время, фото грузиться перестали. Дебаггинг выявил, замкнутый бесконечный цикл в этой процедуре: procedure TBitmap.AssignFromSurface(const Source: TBitmapSurface); var BitmapData: TBitmapData; MaxSize: Integer; ResampledSurface: TBitmapSurface; I: Integer; SourceRect: TRectF; begin MaxSize := CanvasClass.GetAttribute(TCanvasAttribute.MaxBitmapSize); <-- MaxSize = 0 if (Source.Width > MaxSize) or (Source.Height > MaxSize) then begin SourceRect := TRectF.Create(0, 0, Source.Width, Source.Height); SourceRect.Fit(TRectF.Create(0, 0, MaxSize, MaxSize)); ResampledSurface := TBitmapSurface.Create; try ResampledSurface.StretchFrom(Source, Trunc(SourceRect.Width), Trunc(SourceRect.Height), PixelFormat); AssignFromSurface(ResampledSurface); <-- infinity loop here finally ResampledSurface.Free; end; end else begin SetSize(Source.Width, Source.Height); if Map(TMapAccess.Write, BitmapData) then try for I := 0 to TBitmapSurface(Source).Height - 1 do Move(TBitmapSurface(Source).Scanline[I]^, BitmapData.GetScanline(I)^, BitmapData.BytesPerLine); finally Unmap(BitmapData); end; end; end; В самом начале процедуры MaxSize получает значение 0 (ноль!), размеры картинки больше нуля и процедура влетает в бесконечный цикл на строке AssignFromSurface(ResampledSurface); Кто-то сталкивался? Есть мысли как лечить? Всем спасибо!
  8. Добрый день. Существует одна проблема, с которой уже несколько недель не могу справиться. Есть старый код под WinAPI, его нужно переделать под Android через firemonkey. И главная проблема - есть код, который из собственного формата делает HBITMAP из WinAPI. Фактически это структура, где последнее поле - указатели на биты. Это переделать легко, создав собственную копию такой структуры. Но теперь мне нужно перевести ее в TBitmap, и я не очень понимаю как это сделать.
  9. Часто при отрисовке битмапа на холсте используется метод DrawBitmap, где, в частности, в качестве аргумента необходимо указать прямоугольные области источника (SrcRect) и приемника (DestRect). Эти прямоугольники имеют формат записи (Left, Top, Right, Bottom). При указании в качестве SrcRect всего битмапа целиком как здесь на формуме так и в книге Осипова я встречал такую запись: RectF(0,0,ABitmap.Width,ABitmap.Height) Но моя логика подсказывает, что такой битмап должен иметь размеры на 1 пиксель по горизонтали и вертикали больше, чем на самом деле, ведь первый пиксель имеет координаты (0;0), а последний (ABitmap.Width,ABitmap.Height). Что, наверное, приводит к искажениям при отображении битмапа на холсте. Мне думается, что при рисовании целого битмапа следует писать так: RectF(0,0,ABitmap.Width-1,ABitmap.Height-1) Прав ли я или не прав? Если нет, то почему?
  10. Привет, друзья! Подскажите - как, с максимально возможной скоростью, определить отсутствие изображения как такового в TBitmap? Т.е. - есть TBitmap. Он либо заполнен изображением (картинка), либо он - абсолютно черный прямоугольник. Каким способом можно узнать - что в нем именно изображение? Т.е. - НЕ абсолютно черный прямоугольник... И определить это нужно "мгновенно" (условно выражаясь). Заранее всем благодарен за участие! P.S. Варианты типа того что ниже - не предлагать)) Хотелось бы что-то "побыстрее"! Еще раз спасибо! function IsBitmapEmpty(Bmp: TBitmap): Boolean; var X, Y : Integer; BmpData: TBitmapData; yAddr : Integer; AlphaCount : integer; begin Result := False; try AlphaCount := 0; Bmp.Map(TMapAccess.Read, BmpData); for Y := 0 to Bmp.Height div 2 do begin YAddr := Y * Bmp.Height; for X := 0 to Bmp.Width - 1 do if (PAlphaColorArray(BmpData.Data)^[YAddr + X] <> TAlphaColorRec.Null) and (PAlphaColorArray(BmpData.Data)^[YAddr + X] <> TAlphaColorRec.Black) then begin inc(AlphaCount); Break; end; if AlphaCount > 0 then Break; end; finally Bmp.Unmap(BmpData); Result := AlphaCount = 0; end; end;
  11. доброго времени суток подскажите метод как засунуть иконку в bitmap получаю иконку папки и ума не приложу как ее преобразовать var infoFile:SHFILEINFO; flag:Cardinal; begin try flag:=SHGFI_ICON; flag:=flag or SHGFI_SMALLICON; ZeroMemory(Addr(infoFile),SizeOf(infoFile)); SHGetFileInfo('C:\',0,infoFile,SizeOf(infoFile),flag); // infofile.hIcon (HICON) как присвоить его картинки Image1.Bitmap :=
  12. Delphi Seattle, Android 5.0.1 Формирую картинку через ScanLine. На выходе полученный битмап рисуется на полотне TImage, на котором перед этим был нарисован Rect. GlobalBitmap - формированный tbitmap. with ObjectPreviewImage.Bitmap.Canvas do begin BeginScene; Clear(TAlphaColorRec.White); DRect := TRectF.Create(0, 0, GlobalBitmap.Width + 8, GlobalBitmap.Height + 8); DrawRect(DRect, 0, 0, AllCorners, StealthForm.ObjectPreviewImage.AbsoluteOpacity); DRect := TRectF.Create(0, 0, GlobalBitmap.Width, GlobalBitmap.Height); DrawBitmap(GlobalBitmap,DRect, TRectF.Create(2, 2, GlobalBitmap.Width + 2, GlobalBitmap.Height + 2), 1); EndScene; end; Проблема собственно в чем - в андроидной версии слева и внизу рамка "съедается". В Win32 версии все отлично. На прилагаемых скриншотах это четко видно. Документацию читал, гугл гуглил. Что я делаю не так? Или это неизвестные подводные камни андроидного рисования на полотне? P.S. Картинка одинаковая, цвет к определенной области применяется не верно. Походу тоже андроидные приколы. Но с этим я уже разберусь. P.P.S. Уже разобрался с цветом - под андроидом Blue и Red в пикселе надо поменять местами. А насчет канвы - не получается никак. P
  13. Друзья, выручайте! Уже на сутки "завис"... Приложение под Android должно загружать картинки в TListViewItem (аватарки) с HTTP. Ресурс доступен. Картинки на нем тоже. Использую iDHTTP (iDHTTP тоже "кидал" на форму и создавал динамически - результат один) и TMemoryStream. Код ниже. Само приложение на устройстве выдает ошибку: Access violation at address 559E45CC accessing address 00000000 Отладчик выдает: class segmentation fault 11 Опытным путем установил, что ошибка, скорее всего, возникает при попытке заполнения TMemoryStream (пробовал TMemoryStream.LoadFromFile - то же самое, хотя приложением TListViewItem.BitMap.LoadFromFile с этим же файлом проходит на ура и все работает). Во всех случаях используются PNG-картинки небольшого размера и разрешения: 20-25 кБ. В коде адрес картинки указан тестовый осознанно (в приложение картинка по используемому адресу доступна). Часть кода: var item:TListViewItem; pic:TMemoryStream; idhttp1:tidhttp; ... idhttp1.Create(Application); pic:=TMemoryStream.Create; try IdHTTP.Get('http://site.ru/icons/icon.png, pic); try Item.Bitmap.LoadFromStream(pic); except end; finally pic.Free; IdHTTP1.Free; end; Вопроса 2: Что я делаю не так? Подскажите, пож-та, хороший пример для выполнения такой задачи (желательно с применением потоков - чтобы приложение не висло на период загрузки данных из HTTP). Спасибо большое!
  14. Здравствуйте. Хочу загнать карту в приложение. Т.е. сделать ПринтСрин нескольких участков, слить их в одно изображение в фотошопе, а потом иметь возможность просматривать на смартфоне под android. Что бы можно было пальцами приблизить, подвигать карту. Какой компонет посоветуете?
  15. Как вывести текст на изображение так, чтобы его можно было сохранить в .jpg формате. P.S. Нет метода TextOut у Image.
  16. Загружаю картинку в TBitmap из TMemoryStream, но иногда в TBitmap копируется только часть картинки. Загружаю следующим кодом: var ResourceStream: TResourceStream; Bitmap: TBitmap; begin ResourceStream := TResourceStream.Create(hInstance, 'IMAGE_NAME', RT_RCDATA); ResourceStream.Position := 0; Bitmap.LoadFromStream(ResourceStream); ResourceStream.SaveToFile('img_res.png'); Bitmap.SaveToFile('img_bitmap.png'); FreeAndNil(ResourceStream); end; В итоге в img_res.png нормальное изображение, а в img_bitmap.png первые N байт оригинала, при одинаковом размере картинки N одинаковое. С TMemoryStream аналогично. Как исправить?
  17. Я создаю TListViewItem и добавляю её в TListView, но как добавить картинку слева? Вот код создания ячейки: TListViewItem *Item = ListView1->Items->Add(); Item->Text = "123";
  18. Всем доброго времени суток! Через Deployment добавил все нужные картинки. В моем случае мои картинки изменяться никак не будут, и открываются только для чтения. Поэтому я не стал менять пути для них. В связи с этим столкнулся с проблемой - как же собственно получить доступ к ним? То есть мне нужно нарисовать одну из тех картинок. Я не знаю как правильно это делать. Я подключил вверху System.IOUtils, чтобы получить доступ к TPath. Пробовал разные варианты: просто рисовать картинку с этим именем: form1.Canvas.DrawBitmap(fon,RectF(0,0,320,240),RectF(30,30,320,240),1,true); пробовал указывать так еще: fon:=Tbitmap.CreateFromFile(TPath.Combine(TPath.GetDocumentsPath, 'fon.bmp')); а затем рисовал таким же способом: form1.Canvas.DrawBitmap(fon,RectF(0,0,320,240),RectF(30,30,320,240),1,true); Читал тему на вашем форуме с названием "Включение своих файлов в приложение", но это не помогло мне. Не знаю, может надо как ресурс еще их подключить? Хотя мне кажется я неправильно использую TPath. Заранее спасибо всем за помошь.
  19. Здравствуйте. Как изменить цвет отдельного пикселя, а точнее сделать его полностью прозрачным? Например в image загруженная картинка. И надо пиксель с координатами x75 и y50 сделать невидимым.
  20. Как узнать поддерживаемый максимально допустимы размер изображения в TBitmap? Поскольку не любое большое изображение можно загрузить в TBitmap.
  21. Коллеги Есть проблема: Есть картинка созданная средствами сторонней dll, от нее у меня только HBITMAP Как мне ее перекинуть в TBitmap, и вывести ее например в контрол TImage?
  22. Стоит задача программно добавить изображение в MultiResBitmap. Как это можно сделать?
  23. Подскажите пожалуйста глупому человеку , как можно загрузив изображение: buf: TBitmap; buf.LoadFromFile('.bmp'); Определить цвет нужного мне пикселя (X,Y), и нарисовать хотя бы линию этого цвета на форме используя обычный: Canvas.DrawLine
  24. Прошу помощи,как вывести иконки в ListView которые хранятся в StyleBook ? у меня есть база,в ней хранятся ID иконок, которые нужно выводить,в StyleBook лежат иконки, может у кого есть подобный опыт?!
  25. Метод доступа к пикселям TBitmapData.GetScanline работает быстрее чем TBitmap.Map с последующим циклом? Можете привести пример работы с TBitmapData.GetScanline?
×
×
  • Создать...