gpt4 book ai didi

skia - 想在 Ubuntu 上使用 Skia 学习图形

转载 作者:行者123 更新时间:2023-12-04 14:05:13 26 4
gpt4 key购买 nike

就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引起辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the help center为指导。




9年前关闭。




我想学习图形编程,我想使用Skia作为库。
我如何在 Ubuntu 上开始使用它?

最佳答案

使用 r1236 版本。较新版本的skia 在Linux 上存在问题。

svn checkout http://skia.googlecode.com/svn/trunk -r1236

// New URL: svn checkout http://skia.googlecode.com/svn/trunk_no_commit -r1236

cd trunk

Skia 有硬编码的字体路径,所以你想改变它。

编辑 src/ports/SkFontHost_linux.cpp
搜索“SK_FONT_FILE_PREFIX”

将“/usr/share/fonts/truetype/msttcorefonts/”更改为“/usr/share/fonts/TTF/”
./gyp/gyp_skia

make

你现在应该有 libskia.a。
#include "SkCanvas.h"
#include "SkGraphics.h"
#include "SkImageEncoder.h"
#include "SkString.h"
#include "SkTemplates.h"
#include "SkTypeface.h"

// g++ main.cpp -Wl,-rpath,./ -L. -lskia -Iinclude/core -Iinclude/config -Iinclude/images -lpthread -lfreetype -lpng -o main

int main (int argc, char * const argv[]) {

//
SkAutoGraphics ag;

//Output filename
SkString path("skhello.png");

//Set Text To Draw
SkString text("Hydra v0.0.1a");

SkPaint paint;

//Set Text ARGB Color
paint.setARGB(255, 255, 255, 255);

//Turn AntiAliasing On
paint.setAntiAlias(true);
paint.setLCDRenderText(true);
paint.setTypeface(SkTypeface::CreateFromName("sans-serif", SkTypeface::kNormal));

//Set Text Size
paint.setTextSize(SkIntToScalar(40));

//Set Image Width & Height
int width = 500;
int height = 600;

SkBitmap bitmap;
bitmap.setConfig(SkBitmap::kARGB_8888_Config, width, height);
bitmap.allocPixels();

//Create Canvas
SkCanvas canvas(bitmap);
canvas.drawARGB(255, 25, 25, 25);

//Text X, Y Position Varibles
int x = 80;
int y = 60;

canvas.drawText(text.c_str(), text.size(), x, y, paint);

//Set Style and Stroke Width
paint.setStyle(SkPaint::kStroke_Style);
paint.setStrokeWidth(3);

//Draw A Rectangle
SkRect rect;
paint.setARGB(255, 255, 255, 255);
//Left, Top, Right, Bottom
rect.set(50, 100, 200, 200);
canvas.drawRoundRect(rect, 20, 20, paint);

canvas.drawOval(rect, paint);

//Draw A Line
canvas.drawLine(10, 300, 300, 300, paint);

//Draw Circle (X, Y, Size, Paint)
canvas.drawCircle(100, 400, 50, paint);

//Same Image (file, bitmap, image_type, quality)
SkImageEncoder::EncodeFile(path.c_str(), bitmap, SkImageEncoder::kPNG_Type, 0);

return 0;
}

Screenshot

这是一个 SFML2 和 Skia 示例:
#include <SFML/Graphics.hpp>
#include "SkCanvas.h"
#include "SkGraphics.h"
#include "SkImageEncoder.h"
#include "SkString.h"
#include "SkTemplates.h"
#include "SkTypeface.h"

#include <iostream>

// g++ main.cpp -Wl,-rpath,./ -L. -lskia -Iinclude/core -Iinclude/config -Iinclude/images -lpthread -lfreetype -lpng -lsfml-window -lsfml-graphics -lsfml-system

using namespace std;

int main(int argc, char **argv) {

int width = 800;
int height = 600;

// Create the main window
sf::RenderWindow window(sf::VideoMode(width, height), "SFML window");
sf::Image image;

SkAutoGraphics ag;

//Set Text To Draw
SkString text("Hydra Skia v0.0.1a");

SkPaint paint;

//Set Text ARGB Color
paint.setARGB(255, 255, 255, 255);

//Turn AntiAliasing On
paint.setAntiAlias(true);
paint.setLCDRenderText(true);
paint.setTypeface(SkTypeface::CreateFromName("sans-serif", SkTypeface::kNormal));

//Set Text Size
paint.setTextSize(SkIntToScalar(20));

SkBitmap bitmap;
bitmap.setConfig(SkBitmap::kARGB_8888_Config, width / 2, height);
bitmap.allocPixels();

//Create Canvas
SkCanvas canvas(bitmap);
canvas.drawARGB(100, 25, 25, 25);

//Text X, Y Position Varibles
int x = 80;
int y = 60;

canvas.drawText(text.c_str(), text.size(), x, y, paint);

//Set Style and Stroke Width
paint.setStyle(SkPaint::kStroke_Style);
paint.setStrokeWidth(3);

//Draw A Rectangle
SkRect rect;
paint.setARGB(255, 0, 0, 0);
//Left, Top, Right, Bottom
rect.set(50, 100, 200, 200);
canvas.drawRoundRect(rect, 20, 20, paint);

canvas.drawOval(rect, paint);

//Draw A Line
canvas.drawLine(10, 300, 300, 300, paint);

//Draw Circle (X, Y, Size, Paint)
canvas.drawCircle(100, 400, 50, paint);


image.Create(bitmap.width(), bitmap.height(), reinterpret_cast<const sf::Uint8*>(bitmap.getPixels()));

// Load a sprite to display
sf::Texture texture;
if (!texture.LoadFromImage(image))
return EXIT_FAILURE;

sf::Sprite sprite(texture);
//sprite.SetPosition(100, 100);
//sprite.Resize(400, 400);

// Load a sprite to display
sf::Texture tex;
if (!tex.LoadFromFile("background.jpg"))
return EXIT_FAILURE;
sf::Sprite texs(tex);


// Start the game loop
while (window.IsOpened())
{
// Process events
sf::Event event;
while (window.PollEvent(event))
{
// Close window : exit
if (event.Type == sf::Event::Closed)
window.Close();
}

// Clear screen
window.Clear();

window.Draw(texs);
window.Draw(sprite);

// Update the window
window.Display();
}

return EXIT_SUCCESS;
}

关于skia - 想在 Ubuntu 上使用 Skia 学习图形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6639640/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com