Giter Site home page Giter Site logo

Comments (5)

vigo avatar vigo commented on May 19, 2024

Anıl selamlar... resimler RAW formatında. yanlış hatırlamıyorsam sol üstten başlayıp r,g,b olarak renkler var... sıkıntı şu, diyelim resim 10pixel x 10pixel... elinde 00,00,00,00,FF,00..... var 3'lü olarak aldın, örneğe göre 000000,00FF00....... 10 tane olduğunda ilk satırı elde ettin. assembly code'dan bakıp imajların width/height'ı bulmamız lazım... ki sen kaça kaç resmi oluşturacaksın raw'dan...

from dinozorus.

maidis avatar maidis commented on May 19, 2024

Merhaba,

Boyutu en küçük raw dosyası sadekafa.raw üzerinde biraz çalışma yaptım ama henüz istediğim sonucu elde edemedim.

Kısaca yaptıklarım şöyle: ilk önce dosya boyutuna baktım: 544 byte = 4352 bit. Kaynak koddan yanlış yorumlamadıysam resmin çözünürlüğü = 32x34 piksel. Genişliğin ve yüksekliğin çarpımı 1088 yapıyor. Dosya boyutunu bu çarpıma böldüğümüzde = 4352 / 1088 = 4 sonucuna ulaşıyoruz.

Burada iki olasılık var, ya her bir pikseli tanımlamak için 4 bit kullanılmış, ya da her bir renk kanalındaki pikselin kırmızı, yeşil, mavi ve alfa değerleri için 1 bit kullanılmış.

İlk seçenek olabilir mi diye epey bir deneme yaptım. Bunların hepsini RGB veya RGBA varsayımıyla yaptım ama düzgün bir sonuç elde edemedim. Bu satırları yazarken indexed color'ı neden denemediğimi düşündüm, bununla ilgili de deneme yapacağım. Belki, includes/color içindeki palet dosyalarını da kullanarak doğru sonuca ulaşabilirim.

İkinci seçeneğin doğru yol olduğunu varsayarsak resim dosyasını 1088'er bit olarak R, G, B ve A kanallarından oluşturabiliyoruz. Bu şekilde resmin ana hattına neredeyse tam olarak ulaşabiliyoruz ama renkler yanlış.

Biraz değiştirilmiş halini birinci olasılık için de kullandığım kod parçası şöyle:

bool ok;
    QString hadi = "00000011111110000000000000000000000011111111111100000000000000000000111111111111100000000000000000001011111111111100000000000000000010111111111111100000000000000000010111111111111000000000000000000101111111111111000000000000000001011111111111111000000000000000001011111111111110000000000000000010111111111111110000000000000000101111111111111100000000000000001011111111111111000000000000000010111111111111111100000000000000101111111111111111110000000000001011111111000001111110000000001111111111010000001111110000000111111100000110000001111110000011111110000000110000011111100001111111100000000000000111111000011111111000000000000001111000001111111110000000000010011101000011111100100000000001100111100000000100101000100000111000101100001101000001011000000000000011000000110000001000000101000100011000011011000000000000000010100010001100000010000000001000000001000010001001101000001001000100100000100101010000000000000000010000000110010010100000000000001000000010000010000000000000000100000000000000010000001000000010000000000000000011000000000011000000000000000000001111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000010000000000000000000000000000000010000000000000000000000000000000100000000000000000000000000000001000000000000000000000000000000001000000000000000000000000000000010000000000000000000000000000000100000000000000000000000000000001000000000000000000000000000000010000000000000000000000000000000100000000000000000000000000000001000000001111100000000000000000000000000111111100000000000000000000111110111111100000000000000000011111110111111000000000000000001111111110111110000000000000000011111111101111100001100000000000111111111011111000100000000000001111111110111100000000001110011011111111101110110100000000000101011111110100011110000000000001111011111011101101010000000001000011000001011010111101000000111000100011100100111101001000011100011110000000001101010000000110000111000000000000001000000010000000111001111111000000000000000000000001100000000000000000000000000000000001111000000000000000000000001111011110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000100000000000000000000000000000001000000000000000000000000000000001000000000000000000000000000000010000000000000000000000000000000100000000000000000000000000000000100000000000000000000000000000001000000000000000000000000000000010000000000000000000000000000000100000000000000000000000000000001000000000000000000000000000000010000000001111100000000000000000100000000100000100000000000000000000111111000000100000000000000000010000011000000100000000000000001000000011000001000000000000000110000000010000010000000000000001100000000100000100000000000000011000000001011001000100000000011110000000010110100010000000001011100110000111111110000000111111111101100011111111110000000001111111100001111111010110000000001010111111110101101011100000000001001000111001111100011100000000110110100000111111110100000000011001001000000000010011000000011110001011111111111000100000001000001000011111111100010000000000000001000000000000001000000000000000001111111000001100000000000000000000111111111100000000000000000011111110000000000000000000000011111111111100000000000000000000011111111111100000000000000000000111111111111100000000000000000001111111111111100000000000000000001111111111111000000000000000000011111111111111000000000000000000111111111111111000000000000000000111111111111110000000000000000001111111111111110000000000000000011111111111111100000000000000000111111111111111000000000000000001111111111111111100000000000000011111111100000111110000000000000111111110000000111110000000001111110000000000000111110000000111111000000000000000111110000011111100000000000000001111100001111110000000000000000011111000011111100000000000000000111110001111111000000000000110001110000011111000000000000001100111000000111100000001100000000000011100000000000000011000000000000011000000100000000000000000001010011000011100010000000010000100000110001111101101110001100000001000100011110010000111110000000010000000111000100001111111111011000000001000001100000000000001110000000000000001111000000000111000000000000000001111110000011100000000000000000000000000000100000000000000000000000000000000000000000000";

    std::vector<unsigned char> red;
    std::vector<unsigned char> green;
    std::vector<unsigned char> blue;
    std::vector<unsigned char> alpha;

    int i = 0;
    while(i < 32*34*4)
    {
        QString str1 = hadi.mid(i, 1);
        QString str2 = hadi.mid(32 * 34 + i, 1);
        QString str3 = hadi.mid(32 * 34 + 32 * 34 + i, 1);
        QString str4 = hadi.mid(32 * 34 + 32 * 34 + 32 * 34 +i, 1);

        int iVal1 = str1.toInt(&ok,2);
        int iVal2 = str2.toInt(&ok,2);
        int iVal3 = str3.toInt(&ok,2);
        int iVal4 = str4.toInt(&ok,2);
        if (i < 64) {
            qInfo() << "red" << i << str1 << '\n';
            qInfo() << "red" << i << iVal1 << '\n';
            qInfo() << "green" << i << str2 << '\n';
            qInfo() << "green" << i << iVal2 << '\n';
            qInfo() << "blue" << i << str3 << '\n';
            qInfo() << "blue" << i << iVal3 << '\n';
            qInfo() << "alpha" << i << str4 << '\n';
            qInfo() << "alpha" << i << iVal4 << '\n';
        }
        red.push_back(iVal1);
        green.push_back(iVal2);
        blue.push_back(iVal3);
        alpha.push_back(iVal4);
        //qInfo() << "red" << i / 4 << ": " << iVal;
        i = i + 1;
    }
    QImage image(32, 34, QImage::Format_ARGB32);
    int l = 0;
    int x = 0;
    int y = 0;
    do
    {
        image.setPixel(x, y, qRgba(red.at(l)*255, green.at(l)*255, blue.at(l)*255, alpha.at(l)*255));
        x = x + 1;
        if (x == 32)
        {
            x = 0;
            y = y +1;
        }
        l = l + 1;

    } while(l < 32 *34);

    QPixmap a;

    a.convertFromImage(image);
    ui->label->setPixmap(a.scaled(320, 340));

hadi değişkeninin içindekiler, Okteta ile sadekafa.raw'dan okunan binary değerler. Bununla elde edilen sonuç ve görselin asıl hali şöyle:

GIMP ile dosya yapısı hakkında daha çok bilgi edinmek için biraz inceleme yaptım:

Belki gözümden kaçan bir şey vardır, ama henüz göremedim.

Ekleme: Renk modeli olarak CMYK kullanılmıyordur ama dördüncü kanala K gibi davranmak resmin ana hatlarının tam olarak doğru çıkarılmasını sağladı. Bu da dördüncü kanalın alfa olmadığını söylüyor sanırım.

        //image.setPixel(x, y, qRgba(red.at(l)*255 * 0.33, green.at(l)*255*0.6, blue.at(l)*255*0.11, alpha.at(l)*255));

        QColor renk = QColor::fromCmyk(red.at(l)*255, green.at(l)*255, blue.at(l)*255, alpha.at(l)*255);

        image.setPixel(x,y,renk.rgba());

Wikipedia'daki planner maddesi epey aydınlatıcı oldu benim için. Şimdilik RGB muamelesi yaptım ama dört plane olarak davranıp palet dosyalarından karşılık gelen renkleri doğru şekilde alabilirsem orijinallerdeki renklerin aynısını alabileceğim:

...
    std::vector<unsigned char> dortlu;
...
        QString string = str1 + str2 + str3 + str4;
        int ival = string.toInt(&ok, 2);
...
        dortlu.push_back(ival);
...
image.setPixel(x, y, qRgb(dortlu.at(l)*17 * 0.33, dortlu.at(l)*17*0.6, dortlu.at(l)*255*0.11));
...

from dinozorus.

maidis avatar maidis commented on May 19, 2024

Biraz uğraştırdı ama sonunda başardım ve grafiklerle ilgili daha önce bilmediğim (Chunky vs. Planar gibi) şeyler öğrendim. Kodu temizleyip daha işe yarar bir hale getireceğim. Kafamdaki düşünce şu:

  • Dosya boyutunu bit olarak al
  • Dosya boyutunun tüm çarpanlarını bul, böylece resmin tüm olası çözünürlüklerini elde et ( https://www.calculatorsoup.com/calculators/math/factors.php )
  • Tüm paletleri bir vector içinde tut
  • bütün çözünürlüklerdeki resim dosyalarını bütün palet dosyalarıyla ayrı ayrı oluştur

Kullanıcıya tek bir iş kalacak bu çözümde. O da yanlış çözünürlükteki ve renklerdeki resimleri sonradan silmek. Bu da çok zor olmayacaktır ama.

https://paste.ubuntu.com/p/pN2yGv4w25/

from dinozorus.

vigo avatar vigo commented on May 19, 2024

eline sağlık... hatta bunu bi commandline tool haline getirelim, macOS homebrew paketi yapalım?

from dinozorus.

maidis avatar maidis commented on May 19, 2024

Sizlerin eline sağlık @vigo :)

Elimizde şu an şöyle bir şey var:

https://github.com/maidis/rawosaurus

Bu programda benim tekrarlayabildiğim bir sorun var ama üzerine düşemedim bir türlü.

from dinozorus.

Related Issues (4)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.