Cum de a face un pixel acces transparent la pixeli - maimuță foc de la a la i

Cum de a face un pixel acces transparent la pixeli - maimuță foc de la a la i

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 în regulă, dar tableta este pur și simplu minuni: Prima cartografiere a tuturor în mod corect, dar dacă prostokolit în sus și în jos, ca și alte imagini destrăma, unele chiar apar 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 face un pixel acces transparent la pixeli - maimuță foc de la a la i

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 (Sursa, 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!

Cum de a face un pixel acces transparent la pixeli - maimuță foc de la a la i

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 face un pixel acces transparent la pixeli - maimuță foc de la a la i

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 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

Cum de a face un pixel acces transparent la pixeli - maimuță foc de la a la i

Deja pentru o zi "înghețată".

Folosesc iDHTTP (iDHTTP și "aruncat" pe formular și creat dinamic - rezultatul unu) și TMemoryStream.
Codul este de mai jos.

Aplicația de pe dispozitiv dă o eroare: încălcarea accesului la adresa 559E45CC accesând adresa 00000000
Problema debuggerului: defecțiunea segmentării de clasă 11

Empiric determinat că o eroare este probabil să apară atunci când încercați să umple TMemoryStream (TMemoryStream.LoadFromFile încercat - același lucru, deși aplicarea TListViewItem.BitMap.LoadFromFile cu același fișier merge cu un bang, și totul funcționează).

Cum de a face un pixel acces transparent la pixeli - maimuță foc de la a la i

Cum se afișează textul pe o imagine astfel încât să poată fi salvat în format .jpg.
P.S. Nu există o metodă TextOut pentru Image.

Cum de a face un pixel acces transparent la pixeli - maimuță foc de la a la i

Testat pe OS X - Leul montan 10.8.3

După imaginea de actualizare Map / Unmap, imaginea din formularul 3D cu TImage3D nu este actualizată.

Iată un exemplu simplu - TestMap.zip - ceasul înregistrează zgomotul în TImage3D.Bitmap.
În XE7 funcționează sub Win32 și sub OSX.
În XE8 sub Win32 funcționează, iar sub OSX afișează un fundal alb. Dacă forma este desenată de altă fereastră, atunci în acest loc imaginea, adică partea sa (în cazul nostru zgomot) este trasată. Același lucru este valabil dacă forma noastră este scoasă din ecran și trasă înapoi - în locurile în care apare formularul, este afișată o parte din imaginea noastră (zgomot).

BeginUpdate / EndUpdate și Repaint nu au dat un rezultat.

XE8 Update1 este același.

Cum să depășim acest lucru?

(TImage normal funcționează bine).

Acum, la pagina 6 utilizatori

Nu utilizatorii care vizualizează această pagină







Trimiteți-le prietenilor: