Зіткнувся з наступною проблемою - TImage ігнорує встановлені значення XRadius і YRadius у TRectangle (10.1 Berlin with update 2)
Суть - мені необхідно, щоб у TRectangle кути були трохи округлені, для цього я встановлюю XRadius і YRadius. Усередині TRectangle розташований TImage (лівий верхній кут 0,0, ширина і висота збігаються з розмірами TRectangle). Коли я завантажую картинку в TImage (що в дизайнера, що програмно), виходить що TImage відображається з прямими кутами, ігноруючи XRadius і YRadius свого батька. Властивість ClipChildren у TRectangle встановлений.
Як зробити так, щоб TImage скругляются по кутах? Що цікаво, TCircle в цьому плані працює, обрізаючи TImage.
Пишу кроссплатформне додаток. Результат пошуку відображається в 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; До скрол:
Пробував і LiveBinding, і ручну промальовування - результат один і той же. Є ідеї що не так?
P.S. Знаю що потрібно робити через TListView, але замовник хоче «сіточку як в старій програмі», так як на android буде працювати тільки на планшетах - я погодився.
var s: string; fs: TFileStream; begin fs: = TFileStream.Create (tpath.Combine (tpath.GetDownloadsPath, 'load.jpg'), fmCreate); NetHTTPClient1.Get ((Sender as TImage) .Hint, fs); fs.Free; (Sender as TImage) .MultiResBitmap.Bitmaps [1] .LoadFromFile (tpath.Combine (tpath.GetDownloadsPath, 'load.jpg')); підключав ще pas знайшов на цьому форумі FMX.Features.Bitmap.Helpers.pas
(Sender as TImage) .MultiResBitmap.Bitmaps [1] .LoadFromUrl ((Sender as TImage) .Hint); як простіше зробити порадите щоб і вантажилось і форма не Вісла?
Вітаю!
Стоїть завдання завантажувати фотографії і відображати їх в списку. Здавалося б, як два пальці, але.
Код працював довгий час, все вантажилось і відображалося. Через якийсь час, фото грузиться перестали. Дебаггінг виявив, замкнутий нескінченний цикл в цій процедурі:
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);
Хтось стикався? Є думки як лікувати?
Всім дякую!
Всім доброго часу доби. Виникла необхідність вирішити таке завдання: в таблиці бази MySQL зберігається список зображень і їх URL. Необхідно отримати цей список масивом. Потім завантажити зображення і по черзі з інтервалом показати їх в TImage.
Розумію, що отримати список зображень правильніше за допомогою PHP скрипта, але в якому вигляді скрип повинен повернути дані, щоб в Delphi отримати з них масив не знаю.
Раніше для отримання зображень використовував таку процедуру. Але питання, де зберігати зображення перед демонстрацією їх в TImage? Створювати кілька MemoryStream?
procedure LoadWebImage (url: string; image: TBitmap);
var
idhttp. TNetHTTPClient;
ms. TMemoryStream;
begin
IdHTTP: = TNetHTTPClient.Create (nil);
ms: = TMemoryStream.Create;
try
idhttp.Get (url, ms);
ms.Position: = 0;
image.LoadFromStream (ms);
finally
ms.Free;
idhttp.Free;
end;
end;
Доброго дня. Існує одна проблема, з якою вже кілька тижнів не можу впоратися. Є старий код під WinAPI, його потрібно переробити під Android через firemonkey. І головна проблема - є код, який з власного формату робить HBITMAP з WinAPI. Фактично це структура, де останнім поле - покажчики на біти. Це переробити легко, створивши власну копію такої структури. Але тепер мені потрібно перевести її в TBitmap, і я не дуже розумію як це зробити.
Доброго вам дня! Підкажіть, як дізнатися оригінальний розмір картинки, завантаженої в TImage.
Часто при відображенні бітмапами на полотні використовується метод 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) Чи правий я чи не правий? Якщо ні, то чому?
Привіт друзі!
Підкажіть - як, з максимально можливою швидкістю, визначити відсутність зображення як такого в 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;
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
Зараз на сторінці 0 користувачів
Немає користувачів, які переглядають цю сторінку
- Вся активність
- Головна
- Загальні питання
- компоненти
- Розробка компонентів
- Як додати в свій компонент TImage і дати можливість змінювати картинку?