-
Постов
235 -
Зарегистрирован
-
Посещение
-
Победитель дней
9
Сообщения, опубликованные Камышев Александр
-
-
Сделать антиалиасинг пока не получилось, но... Изначально неправильная постановка задачи, не нужен буфер для рисования, это же не GDI. Прорисовка в PaintBox на OnPaint с заливанием фона, копированием слоя подложки и иконок, рисование ломаных линий и фигур, прозрачность, антиалиасинг и т.д. абсолютно не вызывает проблем с ресурсами и морганием, все рисуется быстро и плавно.
-
искал информацию по теме, необязательно Quality для формы устанавливать в design-time, в FormCreate срабатывает
Quality = TCanvasQuality::HighQuality; RecreateCanvas(); Invalidate();
по нажатию кнопки этот код не дает эффекта
-
протестировал 3 варианта:
1. правка FMX.Graphics.pas как указано выше
2. пишу на с++, можно исправить файл FMX.Graphics.hpp
заменить код
__property TCanvasQuality Quality = {read=FQuality, nodefault};
на
__property TCanvasQuality Quality = {read=FQuality, write=FQuality, nodefault};
после этого можно
bmp_buf->Canvas->Quality = TCanvasQuality::HighQuality;
3. Создать новую канву как указано выше
TCanvas *MyCanvas = TCanvasManager::CreateFromBitmap( bmp_buf, TCanvasQuality::HighQuality );
во всех трех случаях свойство Quality под debug имеет значение HighQuality, проверял перед DrawPath:
bool b = MyCanvas->Quality == TCanvasQuality::HighQuality;
и во всех вариантах эффекта не было...
неспроста Quality для формы нужно ставить в design-time
что происходит при сборке, из-чего включается антиалиасинг?
.
-
сори не написал, под андроид пишу приложение с графикой, канва FMX
-
в разделе Антиалиасинг обсуждалось присвоение свойству Quality формы HighQuality и рисование на канве.
если рисовать сразу к примеру в PaintBox или на канву формы, то это работает.
по опыту GDI, стандартно отрисовывают буфер, а уже его копируют на канву визуальных компонентов.
по коду, буфер:
bmp_buf = new TBitmap();bmp_buf->Width = window_rect.Width(); bmp_buf->Height = window_rect.Height();
рисование:
TPathData *pd = new TPathData; pd->MoveTo( Point( 100, 100 ) ); pd->LineTo( Point( 150, 100 ) ); pd->LineTo( Point( 100, 150 ) ); bmp_buf->Canvas->Stroke->Thickness = 5; bmp_buf->Canvas->Stroke->Kind = TBrushKind::Solid; bmp_buf->Canvas->Stroke->Dash = TStrokeDash::Solid; bmp_buf->Canvas->Stroke->Color = (TAlphaColor)TAlphaColorRec::Black; bmp_buf->Canvas->DrawPath( pd, 1 ); delete pd;
на OnPaint копирование буфера:
pbMap->Canvas->BeginScene();pbMap->Canvas->DrawBitmap( bmp_buf, bmp_rect, window_rect, 1, false ); pbMap->Canvas->EndScene();
в результате все быстро, без морганий, но антиалиасинга нет.
у канвы буфера bmp_buf есть свойство Quality:__property TCanvasQuality Quality = {read=FQuality, nodefault}; - только чтение
принимает значения:
enum class DECLSPEC_DENUM TCanvasQuality : unsigned int { ccSystemDefault, ccHighPerformance, ccHighQuality };
по умолчанию ccSystemDefault
вот как бы и вопрос, как создать буферный TBitmap с TCanvas, у которого Quality == ccHighQuality?возможно есть другие варианты рисовать ломаные линии с антиалиасинг? -
На свежую голову сам разобрался, все просто, для некоторых полей ширина по коду получается == 0, присвоение нуля Columns->Width и дает такую картинку.
-
CBuilder XE7
в StringGrid 14 StringColumn, отображаются корректно:
до вот этого куска кода:
for ( int i = 0; i < sgVehicles->ColumnCount; i++ )
{
sgVehicles->Columns->Width = w;
}
после изменения ширины Column отображаются только 6 первых, с наложением полей друг на друга
ColumnCount остается равным 14
Column создавал динамически, пробовал в ItemEditor, эффект остается.
Замена TStringGrid на TGrid также не помогла
TImageControl
в TImageControl
Опубликовано
CBuilder XE7, приложение под андроид.
На форме есть несколько TImageControl с загруженными изображениями.
Тестирование показало, на андроид 5.x приложение крашится на запуске, с сообщением "Приложение было остановлено".
До 5.x все отлично работает. Пустой TImageControl приложение такой ошибки не дает, только с изображением.
Кто нибудь знает, что это за беда и какие есть варианты решения?
Вот в этом обсуждении http://fire-monkey.ru/topic/159-kak-dobavit-v-svoi-komponent-timage-i-dat-vozmozhnos/?p=569
есть 3 и 4 пункт, что вроде как можно в битмапе хранить изображение.
Уточните, как добавить битмап в published секцию(формы я так понял?), и загрузить свое изображение?