Comments (5)
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.
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.
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.
eline sağlık... hatta bunu bi commandline tool haline getirelim, macOS homebrew paketi yapalım?
from dinozorus.
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)
- Kontroller HOT 2
- RAM Gereksinimi HOT 2
- Game not working on FS-UAE-Launcher HOT 5
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
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.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from dinozorus.