1. Məhsullar
  2.   Şəkil
  3.   C++
  4.   OpenImageIO
 
  

Açıq Mənbə C++ API vasitəsilə Şəkil Emalı və Konversiya

Pulsuz C++ Kitabxanası vasitəsilə PNG, JPEG, BMP, TIFF və daha çox kimi məşhur şəkil formatlarını oxuyun, yazın və çevirin.

OpenImageIO proqram tərtibatçılarına C++ proqramları daxilində məşhur şəkil fayl formatlarını oxumaq, yazmaq və emal etmək imkanı verən güclü təsvir emalı kitabxanasıdır. Pluginlər vasitəsilə bir neçə məşhur şəkil formatına dəstək verir. O, OpenEXR, TIFF, JPEG/JFIF, PNG, BMP, JPEG-2000, ICO, PNM, DPX, IFF, Field3D, Ptex, Photoshop PSD, GIF və daha bir neçəsi kimi məşhur şəkil formatlarına dəstək verir.

OpenImageIO kitabxanası bütün dünyada animasiya və VFX studiyalarında geniş istifadə olunur və həmçinin çoxsaylı kommersiya məhsullarına inteqrasiya olunur. OpenImageIO kitabxanası, şəkil formatlarını başqalarına çevirmək, iki şəkli müqayisə etmək, ətraflı məlumatı çap etmək, uyğun metadata üçün şəkilləri axtarmaq, sadə şəkil görüntüləyicisi və s. kimi xüsusiyyətləri nümayiş etdirən bir neçə əmr xətti təsvir alətləri ilə gəlir.

Previous Next

OpenImageIO ilə işə başlamaq

OpenImageIO qurma sistemi CMake-ə əsaslanır. Sisteminizə quraşdırmaq lazımdırsa. OpenImageIO-nu qurduqdan sonra, əgər siz EMBEDPLUGINS=0 bayrağı ilə tərtib etmisinizsə, siz OIIO_LIBRARY_PATH mühit dəyişənini OpenImageIO-nun quraşdırıldığı 'lib' kataloqunu göstərməli olacaqsınız, əks halda o, plaginləri tapa bilməyəcək.

OpenImageIO-nu git əmri ilə quraşdırın

 git clone https://github.com/OpenImageIO/oiio.git 

C++ API vasitəsilə şəkillərin oxunması və yazılması

OpenImageIO kitabxanası proqramçılara şəkilləri oxumağa və yazmağa imkan verir, həmçinin sonrakı şəkillərin çıxışda xaricdən necə istehsal olunacağına nəzarət edir. Normalda, kitabxana tərəfindən oxunan bütün şəkillər əsas ImageCache tərəfindən dəstəklənən ImageBuf-da oxunur və daxili yaddaş üçün avtomatik olaraq float piksellərə çevrilir. Şəkilləri yazarkən o, sadəcə olaraq cari təsviri adlandırılmış fayla çıxarır. Şəkil emalı kitabxanası hazırkı təsviri şəkil yığınından silmir; sadəcə onun bir nüsxəsini saxlayır.

C++ API vasitəsilə Qabaqcıl Şəkil Oxuması<

#include 
using namespace OIIO;
...
const char *filename = "foo.jpg";
auto inp = ImageInput::open (filename);
if (! inp) {
    std::cerr << "Could not open " << filename
              << ", error = " << OIIO::geterror() << "\n";
    return;
}
const ImageSpec &spec = inp->spec();
int xres = spec.width;
int yres = spec.height;
int channels = spec.nchannels;
std::vector pixels(xres * yres * channels);
if (! inp->read_image (TypeDesc::UINT8, &pixels[0])) {
    std::cerr << "Could not read pixels from " << filename
              << ", error = " << inp->geterror() << "\n";
    return;
}
if (! inp->close ()) {
    std::cerr << "Error closing " << filename
              << ", error = " << inp->geterror() << "\n";
    return;
}

Şəklin digər formatlara çevrilməsi

OpenImageIO kitabxanası şəkilləri digər məşhur fayl formatlarına çevirmək üçün funksiyalar təqdim edir. Dəstəklənən şəkil formatları arasında çevirmək çox asandır. iconvert yardım proqramı şəkli oxuyacaq və sonra onu yeni dəstəklənən fayl formatına yazacaq. O, sadəcə fayl uzantısından fayl formatını çıxaracaq. Siz şəkil başlığı, təsvir, açar sözlər və ya metadata əlavə edə bilərsiniz.

C++ vasitəsilə Şəkil metadatasını dəyişdirin

OpenImageIO API proqram tərtibatçılarına açıq mənbə API vasitəsilə öz C++ proqramlarında cari təsvir metadatasını dəyişməyə imkan verir. O, mövcud təsvirin metadatasını dəyişdirən, lakin piksel dəyərlərini dəyişdirməyən əmrləri təmin edir. Yaxşısı odur ki, yalnız cari təsvirə (stackin yuxarısındakı şəkil) təsir edir, lakin yığından aşağı deyil. Siz həmçinin açar sözlər əlavə edə və ya silə, başlıq və ya təsvir əlavə edə, İstənilən metadatanı silə və s. edə bilərsiniz.

C++ vasitəsilə Şəkil metadatasını necə qurmaq olar

// spec["key"] = value  sets the value of the metadata, using
// the type of value as a guide for the type of the metadata.
spec["Orientation"] = 1;   // int
spec["PixelAspectRatio"] = 1.0f;   // float
spec["ImageDescription"] = "selfie";  // string
spec["worldtocamera"] = Imath::M44f(...)  // matrix

C++ API vasitəsilə Şəkillər üzərində Formalar və ya Mətn çəkin

Şəkillərinizi icazəsiz istifadədən qorumaq üçün faydalı başlıqlarla etiketləmək və ya şəkilə su nişanı qoymaq həmişə çox faydalıdır. Açıq mənbəli OpenImageIO kitabxanası şəkillərin üzərində asanlıqla formalar, nöqtələr, xətlər, qutular və ya mətn çəkmək üçün bir neçə vacib funksiyaya malikdir. Siz sadəcə bir neçə sətir kodla şəklinizin üzərinə formalar çəkə və ya ona mətn əlavə edə bilərsiniz. Aşağıdakı kod nümunələri mətnin şəklin üzərinə necə çəkilməsini və onu düzləşdirməyi göstərir.

C++ API vasitəsilə Şəkil üzərində mətni necə çəkmək olar

ImageBufAlgo::render_text (ImgA, 50, 100, "Hello, world");
float red[] = { 1, 0, 0, 1 };
ImageBufAlgo::render_text (ImgA, 100, 200, "Go Big Red!",
                           60, "Arial Bold", red);
float white[] = { 1, 1, 1, 1 };
ImageBufAlgo::render_text (ImgB, 320, 240, "Centered",
                           60, "Arial Bold", white,
                           TextAlignX::Center, TextAlignY::Center);
 Azəri