Поиск сообщества
Показаны результаты для тегов 'PNG'.
Найдено: 3 результата
-
Здравствуйте , скажите пожалуйста , можно ли на ПК преобразовать страницу или фрагмент в формате doc в изображение в формате png, желательно без использования платных компонентов. Спасибо
- 7 ответов
-
- Конвертация
- Doc
-
(и ещё 1 )
C тегом:
-
Возник следующий вопрос: Допустим есть "сложная" форма, внешний вид которой должен быть нестандартным и на которой расположено N-ное количество компонент (исходим из того, что их много, некоторые из них - динамические, например - вывод видео с камеры). "Нестандартный вид" подразумевает: наличие тени у формы, измененный внешний вид, отличный от вида по умолчанию в любой ОС. Непосредственно вопрос звучит так. Какая из двух следующих реализаций будет работать быстрее (отрисовка/обновление этой формы при обновлении компонент: текста, списков, вывод видео и т.д.): Оба вида форм предопределяются в стиле. ВАРИАНТ 1. - Тень формы реализована в виде компонента TImage с подгруженным PNG изображением. - Контур формы реализован компонентом TRectangle с "окантовкой" и заливкой прямоугольника заданным цветом (все без градиентов) - Шапка формы реализована вторым прямоугольником TRectangle без "окантовки", но с заливкой другим цветом (без градиента) ВАРИАНТ 2. Вся форма задана одним объектом TStyleObject в котором в качестве свойств установлены: - SourceLookup - ссылка на PNG-изображение в данном стиле - SourceLink - создан TBitmapLink, у которого заданы свойства CapInsets и SourceRect Внешний вид у них будет практически одинаковый (хотя во втором случае он будет более корректным на любой ОС и при использовании любой видео-карты, чего не скажешь о первом варианте). Однако, интересует именно СКОРОСТЬ отрисовки в обеих случаях! Интересует именно теория, с точки зрения реализации самой FMX. З.Ы. Предполагаю, что вопрос больше к разработчикам FMX, но возможно у кого-то уже есть опыт работы с подобными задачами...
-
Есть моделька человека, собранная из TPlane'ов, на голове - шлем, на шлем накладывается текстура с прозрачными пикселями. Модельку можно вращать. Если подключить StyleBook, то голова перестаёт прорисовываться сквозь прозрачные пиксели при вращении. Запустили приложение, голова прорисована: Поворачиваем - голова мгновенно "стирается": Отключаем StyleBook - крутим модельку, всё хорошо: Как исправить рендеринг сквозь прозрачные пиксели? P.S.: Если в StyleBook'e поставить галочку на UseStyleManager, то снова всё отрисовывается нормально, но использовать StyleManager очень неудобно. Код текстурирования // Скопировать часть битмапа в другой битмап: procedure CopyBitmapToBitmap( const SrcBitmap : FMX.Graphics.TBitmap; // Из какого битмапа копируем const DestBitmap : FMX.Graphics.TBitmap; // В какой битмап копируем const SrcRect : TRectF; // Какой прямоугольник const DstRect : TRectF; // В какой прямоугольник ScaleCoeff : Single = 1.0; // Коэффициент масштабирования (DstRect * ScaleCoeff) Opacity : Single = 1.0; // Коэффициент прозрачности накладываемого изображения FlushBeforeDrawing : Boolean = True; // Очищать ли предыдущее содержимое Interpolate : Boolean = False // Интерполировать ли при масштабировании ); function Max(const A, B: Single): Single; inline; begin if A > B then Result := A else Result := B; end; begin if FlushBeforeDrawing then DestBitmap.Clear($00000000); DestBitmap.SetSize(Round(Max(DstRect.Left, DstRect.Right) * ScaleCoeff), Round(Max(DstRect.Top, DstRect.Bottom) * ScaleCoeff)); DestBitmap.Canvas.BeginScene; DestBitmap.Canvas.DrawBitmap( SrcBitmap, SrcRect, RectF( DstRect.Left, DstRect.Top, DstRect.Left + ((DstRect.Right - DstRect.Left) * ScaleCoeff), DstRect.Top + ((DstRect.Bottom - DstRect.Top) * ScaleCoeff) ), Opacity, not Interpolate ); DestBitmap.Canvas.EndScene; end; // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - procedure TMainForm.DrawSkin(FileStream: TMemoryStream); type TTextureInfo = array of Integer; // OffsetX, OffsetY, Width, Height TCubeTexture = array of TTextureInfo; // Front, Back, Left, Right, Top, Bottom TSurfaceArray = array of ^TPlane; // Индексы элементов в массивах: const iOffsetX = 0; iOffsetY = 1; iWidth = 2; iHeight = 3; iFront = 0; iBack = 1; iLeft = 2; iRight = 3; iTop = 4; iBottom = 5; iHead = 0; iTorso = 1; iLeftArm = 2; iRightArm = 3; iLeftLeg = 4; iRightLeg = 5; iHelmet = 6; const HeadTexture : TCubeTexture = [// X Y W H [8 , 8, 8, 8], // Front [24, 8, 8, 8], // Back [0 , 8, 8, 8], // Left [16, 8, 8, 8], // Right [8 , 0, 8, 8], // Top [16, 0, 8, 8] // Bottom ]; ... { здесь пропущен список координат для каждой текстуры из битмапа } ... const ScaleCoeff: Single = 16.0; var Bitmap: FMX.Graphics.TBitmap; // Список поверхностей каждой части модели: HeadPlanes : TSurfaceArray; TorsoPlanes : TSurfaceArray; LeftArmPlanes : TSurfaceArray; RightArmPlanes : TSurfaceArray; LeftLegPlanes : TSurfaceArray; RightLegPlanes : TSurfaceArray; HelmetPlanes : TSurfaceArray; // Список частей модели: ModelParts: array of ^TSurfaceArray; // Список текстур каждой части модели: ObjectTextures: array of ^TCubeTexture; // I - счётчик по частям модели, J - счётчик по поверхностям: I, J: LongWord; begin // Загружаем битмап из PNG-файла: Bitmap := FMX.Graphics.TBitmap.Create; Bitmap.LoadFromStream(FileStream); // Составляем массив из групп текстур для каждой части модели: ObjectTextures := [@HeadTexture, @TorsoTexture, @LeftArmTexture, @RightArmTexture, @LeftLegTexture, @RightLegTexture, @HelmetTexture]; // Составляем список поверхностей: HeadPlanes := [@HeadFront , @HeadBack , @HeadLeft , @HeadRight , @HeadTop , @HeadBottom ]; TorsoPlanes := [@TorsoFront , @TorsoBack , @TorsoLeft , @TorsoRight , @TorsoTop , @TorsoBottom ]; LeftArmPlanes := [@LeftArmFront , @LeftArmBack , @LeftArmLeft , @LeftArmRight , @LeftArmTop , @LeftArmBottom ]; RightArmPlanes := [@RightArmFront, @RightArmBack, @RightArmLeft, @RightArmRight, @RightArmTop, @RightArmBottom]; LeftLegPlanes := [@LeftLegFront , @LeftLegBack , @LeftLegLeft , @LeftLegRight , @LeftLegTop , @LeftLegBottom ]; RightLegPlanes := [@RightLegFront, @RightLegBack, @RightLegLeft, @RightLegRight, @RightLegTop, @RightLegBottom]; HelmetPlanes := [@HelmetFront , @HelmetBack , @HelmetLeft , @HelmetRight , @HelmetTop , @HelmetBottom ]; // Составляем список частей модели: ModelParts := [@HeadPlanes, @TorsoPlanes, @LeftArmPlanes, @RightArmPlanes, @LeftLegPlanes, @RightLegPlanes, @HelmetPlanes]; // Проходимся по каждой части модели (голова, корпус, ...): for I := 0 to High(ModelParts) do begin // Проходимся по каждой поверхности модели: for J := 0 to High(ModelParts[I]^) do begin // Рисуем текстуру на каждой поверхности: with (ModelParts[I]^)[J]^ do begin CopyBitmapToBitmap( Bitmap, TTextureMaterialSource(MaterialSource).Texture, RectF( (ObjectTextures[I]^)[J][iOffsetX], (ObjectTextures[I]^)[J][iOffsetY], (ObjectTextures[I]^)[J][iOffsetX] + (ObjectTextures[I]^)[J][iWidth], (ObjectTextures[I]^)[J][iOffsetY] + (ObjectTextures[I]^)[J][iHeight] ), RectF(0, 0, (ObjectTextures[I]^)[J][iWidth], (ObjectTextures[I]^)[J][iHeight]), ScaleCoeff ); // Инвертируем текстуры для симметрии: if I in [iLeftArm, iLeftLeg] then TTextureMaterialSource(MaterialSource).Texture.FlipHorizontal; end; end; end; FreeAndNil(Bitmap); end;