Seite 1 von 1
QImage::scaled
Verfasst: 7. Mai 2008 11:43
von pospiech
Ich habe Bilder in der Größe 256 die auf 768 vergrößert werden.
Damit haben diese genau den Faktor 3. Ich möchte auch das im Endbild die Struktur exakt die gleiche ist wie im Originalbild, also jeweils 9 Pixel mit derselben Farbe.
Wenn ich nun hochskalieren mit
Qt::FastTransformation oder
Qt::SmoothTransformation
dann hat das 768er Bild jeden Pixel eine andere Farbe, nur dass bei Fast das ganze sehr Pixelig ist, und bei Smooth sehr verwaschen.
Gibt es eine Möglichkeit unverändert hochzuskalieren sofern die Faktoren passen und nur bei nichtganzahligen Faktoren eine Umrechnung vorzuhmen?
Matthias
Verfasst: 7. Mai 2008 12:24
von upsala
Was du eigentlich suchst ist eine Skalierung einer Vektor-Grafik und keiner Pixel-Grafik. Du könntest dir also überlegen, wie du deine Pixel-Grafik vektorisieren lassen kannst.
Verfasst: 7. Mai 2008 12:38
von pospiech
upsala hat geschrieben:Was du eigentlich suchst ist eine Skalierung einer Vektor-Grafik und keiner Pixel-Grafik. Du könntest dir also überlegen, wie du deine Pixel-Grafik vektorisieren lassen kannst.
Was ich brauche ist eine 'schnelle' Konvertierung. Ein Bitmap zu vektorisieren scheint mir nicht schnell zu sein. Ich könnte diese Konvertierung natürlich über For schleifen vornehmen und die Transformation selber erledigen, aber das scheint mir überhaupt nicht schnell zu sein.
Im Grund will ich ja nichts anders, als aus
12
34
ein
111222
111222
111222
333444
333444
333444
zu machen.
Verfasst: 7. Mai 2008 12:43
von Christian81
Du möchtest ein spezielles Verfahren zum Skalieren - das bietet Qt nicht (zumindest nicht in genau der Art wie Du es willst), also musst Du es selbst machen.
Verfasst: 7. Mai 2008 12:50
von macman
pospiech hat geschrieben:Was ich brauche ist eine 'schnelle' Konvertierung.
Was Du suchst ist ein vergrößern, kein skalieren.
pospiech hat geschrieben:Ich könnte diese Konvertierung natürlich über For schleifen vornehmen und die Transformation selber erledigen, aber das scheint mir überhaupt nicht schnell zu sein.
Warum nicht? Beim skalieren wird jedes Pixel neu berechnet, je nach Algorithmus abhängig von umliegenden Pixeln, usw. Beim vergößern erhöhst du nur die Anzahl der Pixel, rechnest aber nicht an jedem rum. Wenn man es vernünftig macht, dann ist es auch schnell.
Verfasst: 7. Mai 2008 15:50
von pospiech
macman hat geschrieben:Wenn man es vernünftig macht, dann ist es auch schnell.
Ich arbeite daran, aber mein Code lösst im Moment nur eine Assertion aus, sobald der Scope der Äußeren for Schleife verlassen wird, und ich verstehe nicht warum:
Code: Alles auswählen
void widgetComplexBeamView::rescaleImage(QImage * image)
{
double divider = m_ViewSize.width()/image->width();
if (((int)divider == divider) && divider > 1)
{
m_scaledImage = QImage(m_ViewSize.width(), m_ViewSize.height(), QImage::Format_RGB32);
int y_scaled = 0;
int divider_x = (int)divider;
int divider_y = (int)divider;
for ( int y = 0; y < image->height(); y++ )
{
QRgb *line = (QRgb *)image->scanLine(y) ;
for (int multy = 0; multy < divider_y; multy++)
{
y_scaled++;
QRgb *linescaled = (QRgb *)m_scaledImage.scanLine(y_scaled) ;
for ( int x = 0; x < image->width(); x++ )
{
QRgb color = *line++;
for (int multx = 0; multx < divider_x; multx++)
{
*linescaled++ = color;
//qDebug() << y << y_scaled << x;
}
}
}
}
}
else
{
m_scaledImage = image->scaled(m_ViewSize.width(), m_ViewSize.height(), Qt::IgnoreAspectRatio, Qt::SmoothTransformation); //Qt::FastTransformation
}
}
Verfasst: 8. Mai 2008 08:39
von macman
pospiech hat geschrieben:Ich arbeite daran, aber mein Code lösst im Moment nur eine Assertion aus, sobald der Scope der Äußeren for Schleife verlassen wird, und ich verstehe nicht warum:
Na dann wird es Zeit Funktionsweise und Bedienung eine Debuggers zu erlernen

Verfasst: 8. Mai 2008 08:42
von pospiech
macman hat geschrieben:pospiech hat geschrieben:Ich arbeite daran, aber mein Code lösst im Moment nur eine Assertion aus, sobald der Scope der Äußeren for Schleife verlassen wird, und ich verstehe nicht warum:
Na dann wird es Zeit Funktionsweise und Bedienung eine Debuggers zu erlernen

Haha!
Die Schleife läuft komplett durch, was ich anhand des qDebug sehen kann. Wenn ich nun aber eine Breakpoint auf das else setzte ist es schon abgestürzt. Das Assert taucht im Qt Quellcode auf, wo er keinen entsprechenden Quellcode zu anzueigen kann.
Wie soll ich das nun Debuggen?
Matthias
Verfasst: 8. Mai 2008 09:05
von upsala
Dieses Forum ist nicht dazu, um zu erklären, wie man einen Debugger bedient. Da dir aber anscheinend nicht einmal die Funktionsweise deines Programmes bekannt ist, empfehle ich dir den Einzelschrittbetrieb im Debugger. Die Bedienungsanleitung des von dir verwendeten Debuggers hilft dir hier sicher weiter.