ПредишенСледващото

Как да си направим пиксел прозрачен достъп до пиксел - пожар маймуната от А до Я

Аз пиша многоплатформени приложения. резултат от търсенето се показва в TGrid. Беше въпрос на показване на изображения в една от колоните.
На Windows, всичко е ОК, но таблетката е просто чудеса: Първият картографирането на всички правилно, но ако prostokolit нагоре и надолу, както и някои други сбиване снимки, някои от тях дори се появи с главата надолу.
Кодът за запазване на картината (JPG) в базата данни:
ако целеви (см) след това започва sm.Position: = 0; //TBlobField(dmData.cdsPlayerData.FieldByName('Photo')).LoadFromStream(sm); vImage: = TImage.Create (нула); опитайте sm.Position: = 0; vImage.Bitmap.LoadFromStream (см); vKoef: = vImage.Bitmap.Height / 64; vImage.Bitmap.Resize (TRUNC (vImage.Bitmap.Width / vKoef), TRUNC (vImage.Bitmap.Height / vKoef)); sm.Free; SM: = TMemoryStream.Create (); опитайте vImage.Bitmap.SaveToStream (см); TBlobField (dmData.cdsPlayerData.FieldByName ( "SmallPhoto")) LoadFromStream (см) .; най-накрая sm.Free; приключи; най-накрая vImage.Free; приключи; приключи; Преди да преминете:

Опитах се и LiveBinding и ръчно рисуване - резултатът е един и същ. Имаш ли представа какво не е наред?
Послепис Аз знам какво да правя през TListView, но по желание на клиента "на окото в старата програма", както андроидът ще се показва само на плочите - аз се съгласих.

Как да си направим пиксел прозрачен достъп до пиксел - пожар маймуната от А до Я

Добре дошли!
Целта е да се качват снимки и да ги показват в списък. Тя ще изглежда, като двата пръста, но.
Кодът е работил дълго време, всичко се зарежда и показва. След известно време, снимката вече не зарежда. Отстраняване на грешки разкри затворен безкраен цикъл в тази процедура:
процедура TBitmap.AssignFromSurface (Конст Източник: TBitmapSurface); Var BitmapData: TBitmapData; MAXSIZE: Integer; ResampledSurface: TBitmapSurface; I: Integer; SourceRect: TRectF; започне MAXSIZE: = CanvasClass.GetAttribute (TCanvasAttribute.MaxBitmapSize); <-- MaxSize = 0 if (Source.Width> MAXSIZE) или (Source.Height> MAXSIZE) след това започва SourceRect: = TRectF.Create (0, 0, Source.Width, Source.Height); SourceRect.Fit (TRectF.Create (0, 0, MAXSIZE, MAXSIZE)); ResampledSurface: = TBitmapSurface.Create; опитайте ResampledSurface.StretchFrom (Източник, 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);

Някой се сблъскват? Някаква идея как да се лекува?
Благодаря на всички ви!

Как да си направим пиксел прозрачен достъп до пиксел - пожар маймуната от А до Я

Добър ден. Има един проблем, който вече няколко седмици не могат да се справят. Има една стара код под WinAPI, е необходимо да се променят под Android през firemonkey. И основният проблем - има код, който е от родния формат прави HBITMAP от WinAPI. В действителност, това е структура, където последното поле - указател към бита. Лесно е да се променят, да направи свое собствено копие на тази структура. Но сега трябва да го преведе на TBitmap, а аз наистина не разбирам как да го направя.

Как да си направим пиксел прозрачен достъп до пиксел - пожар маймуната от А до Я

Често, когато въз основа на метода на платно растерна графика се използва DrawBitmap, къде, по-специално, като аргумент трябва да се уточни правоъгълна района на източника (SrcRect) и приемника (DestRect). Тези правоъгълници записват формат (за ляво, горе отдясно и отдолу).
Когато определяте като SrcRect цялата растерна графика като цяло тук formuma и Osipova в книгата съм срещал такъв запис:
RectF (0,0, ABitmap.Width, ABitmap.Height) Но моята логика диктува, че това трябва да бъде размерът на растерна графика за един пиксел, както хоризонтално и вертикално повече, отколкото е всъщност, тъй като първата пиксел има координати (0, 0), и последната (ABitmap.Width, ABitmap.Height). Това най-вероятно води до нарушения в растерна графика се показва на платното.
Мисля, че при изготвянето на цялата растерна графика трябва да бъде написано, както следва:
RectF (0,0, ABitmap.Width-1, ABitmap.Height-1) Аз съм прав или не? Ако не, защо не?

Здравейте, приятели!
Prompt - възможно най-бързо, за да се определи липсата на изображението като такива в TBitmap?
Т.е. - има TBitmap. Той е или изпълнен със снимка (Снимка), или той е - напълно черен правоъгълник.
можете да разберете по какъв начин - че това е изображение? Т.е. - не е абсолютно черен правоъгълник.
И това е необходимо да се идентифицират "незабавно" (относително казано).
Преминаване към всички благодарим за Вашето участие!
Послепис Опции като това, което е долу - не предлагат)) Бих искал нещо "бързо"! Благодаря отново!
функция IsBitmapEmpty (BMP: TBitmap): булева; Var X, Y. цяло число; BmpData: TBitmapData; yAddr. Цяло число; AlphaCount. цяло число; започнем Резултат: = False; опитайте AlphaCount: = 0; Bmp.Map (TMapAccess.Read, BmpData); за Y: = 0 до Bmp.Height DIV 2 се започне YAddr: = Y * Bmp.Height; за X: = 0 до Bmp.Width - 1 направи, ако (PAlphaColorArray (BmpData.Data) ^ [YAddr + X] <> TAlphaColorRec.Null) и (PAlphaColorArray (BmpData.Data) ^ [YAddr + X] <> TAlphaColorRec.Black) след това започва INC (AlphaCount); Счупете; приключи; ако AlphaCount> 0, тогава прекъсване; приключи; накрая Bmp.Unmap (BmpData); Резултати: = AlphaCount = 0; приключи; приключи;

Delphi Сиатъл, Android 5.0.1
Генерира картината от ScanLine. На изхода на получения растерна графика е съставен на TImage на платно, който бе изготвен преди да го Rect.
GlobalBitmap - профили tbitmap.
с ObjectPreviewImage.Bitmap.Canvas направя започне 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; приключи;
Проблемът всъщност в какво - в Android-версията на защитата на гостите и долната част на рамката "яде". всички Във версията Win32 са отлични. В приложените снимки на екрана да се вижда добре.
Четох документацията, Google Google.

Какво съм аз греша? Или неизвестни капани андроид рисуване върху платното?

Послепис Картината е един и същ, цвета на даден регион не се прилага правилно. Хайк твърде хуманоиден забавно. Но с това, че ще се справи.
P.P.S. Вече измисли цвят - за Android в синьо и червено в един пиксел трябва да се преобърне. Що се отнася до платното - тя не работи по никакъв начин.
P

Как да си направим пиксел прозрачен достъп до пиксел - пожар маймуната от А до Я

Още от деня "висящи".

Използвайте iDHTTP (iDHTTP също "хвърлят" на формата и динамично създаден - резултатът от един) и TMemoryStream.
Кодът по-долу.

Самото приложение генерира грешка на устройството: Достъп нарушение на адрес 559E45CC достъп адрес 00000000
Debugger изходи: клас сегментиране грешки 11

Определили емпирично, че грешка е вероятно да се случи, когато се опита да запълни TMemoryStream (опитах TMemoryStream.LoadFromFile - едно и също нещо, въпреки че TListViewItem.BitMap.LoadFromFile приложение с един и същи файл отива с гръм и трясък, и всичко работи).

Как да си направим пиксел прозрачен достъп до пиксел - пожар маймуната от А до Я

Как да се покаже текста на картинката, така че тя може да бъде записан във формат .jpg.
Послепис Няма начин на TextOut от изображението.

Как да си направим пиксел прозрачен достъп до пиксел - пожар маймуната от А до Я

Тествано на OS X - Mountain Lion 10.8.3

След Карта / • Изключване на актуализиране на изображения, изображението на 3D-форми с TImage3D не се актуализира.

Ето един прост пример - TestMap.zip - таймер поставя шум в TImage3D.Bitmap.
В XE7 тя работи под Win32 и под OSX.
В XE8 под win32 работи под OSX и показва на бял фон. Ако във формуляра да държи някакъв друг прозорец, в това място на снимката, т.е. част (в този случай, шум), е съставен. Същото важи и ако нашата форма на екран и изтеглете назад - на места с форма поява показва част от нашите снимки (шум).

BeginUpdate / EndUpdate и пребоядисвам да не се ползват.

XE8 Update1 - едно и също нещо.

Как да се преодолее това?

(Normal TImage протича гладко).

Сега потребителите на страница 0

Не са хора, които търсят в тази страница

Подкрепете проекта - споделете линка, благодаря!