Cum de a permite antialiasing pe antialiasing Android - maimuță foc de la a la

Cum de a permite antialiasing pe antialiasing Android - maimuță foc de la a la

Confruntată cu următoarea problemă - TImage ignoră valorile XRadius și YRadius stabilite de TRectangle (10.1 Berlin cu actualizarea 2)

Essence - Am nevoie de colturi TRectangle pentru a fi usor rotunjite, pentru asta il instalez pe XRadius si YRadius. În interiorul TRectangle este un TImage (colțul din stânga sus este 0.0, lățimea și înălțimea sunt aceleași ca și dimensiunile TRectangle). Când încarc o imagine în TImage (care este în proiectant, programat), se pare că TImage este afișat cu unghiuri drepte, ignorând XRadius și YRadius ale părintelui său. Proprietatea ClipChildren din TRectangle este stabilită.






Cum fac TImage rotund la colțuri? Interesant este faptul că TCircle lucrează în acest sens, tăind TImage.

Cum de a permite antialiasing pe antialiasing Android - maimuță foc de la a la

Scriu o aplicație cross-platform. Rezultatul căutării este afișat în TGrid. A apărut o problemă de afișare a unei imagini într-una din coloane.
Pe Windows, totul este OK, dar pe tabletă există pur și simplu miracole: la primul afișaj totul este corect, dar dacă tocmai ați urcat în sus și în jos pe măsură ce imaginile sunt frecate de alții, partea este în general afișată cu susul în jos.
Codul pentru salvarea imaginii (jpg) în baza de date:
dacă Assigned (sm) începe apoi sm.Position: = 0; //TBlobField(dmData.cdsPlayerData.FieldByName('Photo')).LoadFromStream(sm); vImage: = TImage.Create (zero); încercați 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 (); încercați vImage.Bitmap.SaveToStream (sm); TBlobField (dmData.cdsPlayerData.FieldByName ( 'SmallPhoto')) LoadFromStream (sm) .; în cele din urmă sm.Free; se încheie; în cele din urmă vImage.Free; se încheie; se încheie; Până la derulare:

A încercat atât LiveBinding, cât și desenul manual - rezultatul este același. Ai vreo idee ce sa întâmplat?
P.S. Știu ce trebuie făcut prin intermediul TListView, dar clientul dorește să "se potrivească ca în programul vechi", deoarece Android va lucra numai pe tablete - am fost de acord.

Cum de a permite antialiasing pe antialiasing Android - foc de maimuță de la a la

var s: șir; fs: TFileStream; începe fs: = TFileStream.Create (tpath.Combine (tpath.GetDownloadsPath, 'load.jpg'), fmCreate); NetHTTPClient1.Get ((Expeditor ca TImage). Indicație, fs); fs.Free; (Expeditor ca TImage) .MultiResBitmap.Bitmaps [1] .LoadFromFile (tpath.Combine (tpath.GetDownloadsPath, 'load.jpg')); conectat un alt pas găsit pe acest forum FMX.Features.Bitmap.Helpers.pas
(Expeditor ca TImage). MultiResBitmap.Bitmaps [1] .LoadFromUrl ((Expeditor ca TImage) .Hint); Cum este mai ușor să consiliezi acest lucru și acesta a fost încărcat și forma nu a atârnat?

Cum de a permite antialiasing pe antialiasing Android - maimuță foc de la a la

Bine ai venit!
Sarcina este de a încărca fotografii și de a le afișa în listă. Ar părea ca două degete, dar.
Codul a funcționat mult timp, totul a fost încărcat și afișat. După un timp, fotografiile nu au fost încărcate. Depanarea a dezvăluit o buclă infinită închisă în această procedură:
procedura TBitmap.AssignFromSurface (const Sursa: TBitmapSurface); var BitmapData: TBitmapData; MaxSize: Integer; ReambalatSuprafața: TBitmapSurface; I: Integer; SourceRect: TRectF; începe MaxSize: = CanvasClass.GetAttribute (TCanvasAttribute.MaxBitmapSize); <-- MaxSize = 0 if (Source.Width> MaxSize) sau (Source.Height> MaxSize) apoi începe SourceRect: = TRectF.Create (0, 0, Source.Width, Source.Height); SourceRect.Fit (TRectF.Create (0, 0, MaxSize, MaxSize)); ReambalatSuprafața: = TBitmapSurface.Create; încercați ResampledSurface.StretchFrom (Sursă, Trunc (SourceRect.Width), Trunc (SourceRect.Height), PixelFormat); AssignFromSurface (ResamplingSurface); <-- 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 (ResamplingSurface);

Cineva sa confruntat? Există gânduri cum să tratăm?
Mulțumesc tuturor!

Tot timpul zilei. A existat o nevoie de a rezolva o astfel de problemă: tabela de baze de date MySQL conține o listă de imagini și adresele lor URL. Este necesar să obțineți această listă printr-o matrice. Apoi, încărcați imaginile și le afișați alternativ în intervale cu TImage.
Înțeleg că este mai corect să obțineți lista de imagini folosind un script PHP, dar în ce formă scriptul ar trebui să returneze datele, astfel încât în ​​Delphi nu știu cum să obțin un tablou de la ei.
Anterior, pentru a obține imagini utilizate această procedură. Dar întrebarea este, unde să stocați imaginile înainte de a le demonstra TImage? Creați mai multe memorii MemoryStream?
procedura LoadWebImage (url: string; imagine: TBitmap);
var
idhttp. TNetHTTPClient;
ms. TMemoryStream;
începe
IdHTTP: = TNetHTTPClient.Create (zero);
ms: = TMemoryStream.Create;
încerca
idhttp.Get (url, ms);
ms.Poziție: = 0;
image.LoadFromStream (ms);
în cele din urmă
ms.Free;
idhttp.Free;
se încheie;
se încheie;

Cum de a permite antialiasing pe antialiasing Android - maimuță foc de la a la

Bună ziua. Există o problemă cu care nu am reușit să fac față pentru mai multe săptămâni. Există un cod vechi sub WinAPI, acesta trebuie să fie remodelat pentru Android prin intermediul firemonkey. Și principala problemă este că există un cod care, din propriul format, face HBITMAP de la WinAPI. De fapt, aceasta este structura în care ultimul câmp este indicatorul pentru biți. Este ușor de remake, creând o copie a unei astfel de structuri. Dar acum trebuie să o traduc în TBitmap și nu prea înțeleg cum să o fac.

Cum de a permite antialiasing pe antialiasing Android - maimuță foc de la a la

Bună ziua! Spuneți-mi cum să aflu dimensiunea originală a imaginii încărcate în TImage.

Cum de a permite antialiasing pe antialiasing Android - maimuță foc de la a la

Adesea, atunci când se desenează un bitmap pe pânză, se folosește metoda DrawBitmap, unde, în special, regiunile sursă dreptunghiulară (SrcRect) și receptorul (DestRect) trebuie specificate ca argument. Aceste dreptunghiuri au un format de înregistrare (Stânga, Sus, Dreapta, Jos).
Când specificăm întregul bitmap ca întregul SrcRect ca aici pe formular și în cartea lui Osipov, am văzut următoarea intrare:
RectF (0,0, ABitmap.Width, ABitmap.Height) Dar logica mea dictează că acest lucru ar trebui să fie dimensiunea bitmap la 1 pixel atât pe orizontală cât și pe verticală, mai mult decat este de fapt, din moment ce primul pixel are coordonatele (0, 0), și ultima (ABitmap.Width, ABitmap.Height). Care, probabil, duce la distorsiuni atunci când afișează un bitmap pe pânză.
Cred că atunci când tragem un întreg bitmap ar trebui să fie scris astfel:
RectF (0,0, ABitmap.Width-1, ABitmap.Height-1) Am dreptate sau nu? Dacă nu, de ce?

Bună, prieteni!
Spune-mi - cum, cu viteza maximă posibilă, determină absența imaginii ca atare în TBitmap?
Ie - este TBitmap. Este fie umplut cu o imagine (imagine), fie este un dreptunghi absolut negru.
Cum puteți afla - care este imaginea din ea? Ie - Nu dreptunghi absolut negru.
Și pentru ao defini este necesară "instantaneu" (în mod condiționat).
În avans, toată lumea este recunoscătoare pentru participare!
P.S. Opțiuni ca cel de mai jos - nu oferi)) Aș dori ceva "repede"! Multumesc din nou!
funcția IsBitmapEmpty (Bmp: TBitmap): Boolean; var X, Y. Integer; BmpData: TBitmapData; yAddr. integer; AlphaCount. întreg; începe Rezultat: = False; încercați AlphaCount: = 0; Bmp.Map (TMapAccess.Read, BmpData); pentru Y: = 0 la Bmp.Height div 2 nu începe YAddr: = Y * Bmp.Height; pentru X: = 0 la Bmp.Width - 1 do if (PAlphaColorArray (BmpData.Data) ^ [YAddr + X] <> TAlphaColorRec.Null) și (PAlphaColorArray (BmpData.Data) ^ [YAddr + X] <> TAlphaColorRec.Black) apoi începeți inc (AlphaCount); Break; se încheie; dacă AlphaCount> 0 atunci Break; se încheie; în cele din urmă Bmp.Unmap (BmpData); Rezultat: = AlphaCount = 0; se încheie; se încheie;

Delphi Seattle, Android 5.0.1
Formez imaginea prin ScanLine. La ieșire, bitmapul rezultat este desenat pe TImage, pe care a fost desenat Rect înainte.
GlobalBitmap este un tbitmap generat.
cu ObjectPreviewImage.Bitmap.Canvas nu începe BeginScene; Clear (TAlphaColorRec.White); DRect: = TRectF.Create (0, 0, GlobalBitmap.Width + 8, GlobalBitmap.Height + 8); DrawRect (DRect, 0, 0, AllCorners, StealthForm.ObjectPreviewImage.AbsoluteOpacitate); DRect: = TRectF.Creați (0, 0, GlobalBitmap.Width, GlobalBitmap.Height); DrawBitmap (GlobalBitmap, DRect, TRectF.Create (2, 2, GlobalBitmap.Width + 2, GlobalBitmap.Height + 2), 1); EndScene; se încheie;
Problema este de fapt ceea ce - în versiunea android de pe partea stângă și sub cadru este "mâncat". În versiunea Win32, totul este bine. Pe capturile de ecran atașate este clar vizibil.
Am citit documentația, google.

Ce fac greșit? Sau este capcanele necunoscute ale picturii Android pe pânză?

P.S. Imaginea este aceeași, culoarea unei anumite zone nu este aplicată corect. Campania este, de asemenea, bancuri pentru Android. Dar mă voi ocupa deja de asta.
P.P.S. Ați dat seama deja de culoarea - sub android albastru și roșu în pixel, trebuie să schimbați. Și despre panza - nu funcționează în nici un fel.
P

Acum, la pagina 6 utilizatori

Nu utilizatorii care vizualizează această pagină







Trimiteți-le prietenilor: