QImage::scaled
QImage::scaled
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
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
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.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.
Im Grund will ich ja nichts anders, als aus
12
34
ein
111222
111222
111222
333444
333444
333444
zu machen.
-
Christian81
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
Was Du suchst ist ein vergrößern, kein skalieren.pospiech hat geschrieben:Was ich brauche ist eine 'schnelle' Konvertierung.
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.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.
Die deutsche Schriftsprache ist case-sensitive. Außerdem gibt es eine Interpunktionsnorm. Wenn manch einer seine Programme genauso schlampig schreibt, wie sein Posting hier, dann sollte er es lieber bleiben lassen.
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:macman hat geschrieben:Wenn man es vernünftig macht, dann ist es auch schnell.
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
}
}
Na dann wird es Zeit Funktionsweise und Bedienung eine Debuggers zu erlernenpospiech 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:
Die deutsche Schriftsprache ist case-sensitive. Außerdem gibt es eine Interpunktionsnorm. Wenn manch einer seine Programme genauso schlampig schreibt, wie sein Posting hier, dann sollte er es lieber bleiben lassen.
Haha!macman hat geschrieben:Na dann wird es Zeit Funktionsweise und Bedienung eine Debuggers zu erlernenpospiech 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:
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
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.