Seite 1 von 1

[gelöst]QImage save() retrun false

Verfasst: 18. Februar 2011 11:09
von Sven K.
Hallo,

ich nutze die save Methode von QImage!

Code: Alles auswählen

QImage Img;
if (! Img.save(Fn, "BMP", Qt::MonoOnly))
{
  ...
}
(QT Version 4.5.1)
Auf meinen Rechner funktioniert es einwandfrei, wenn ich jedoch auf einem Rechner teste, wo kein QT installiert ist (QtCore451.dll und QtGui451.dll sind vorhanden), erhalte ich als return wert immer false.
Scheinbar liegt es an einer fehlenden Dll aus "..\plugins\imageformats\"!
Aber welche ? Oder kann mir jemand sagen ob ich was anderes falsch mache?

Sven

Verfasst: 18. Februar 2011 11:33
von franzf
AFAIK ist BMP ein eingebautes Image-Plugin, braucht also keine zusätzlichen DLLs.
Hat denn der User auch Schreibrechte im Verzeichnis?
Du kannst mal den Umweg über QImageWriter machen

Code: Alles auswählen

QImageWriter writer(Fn, "BMP");
if(!writer.write(image) {
    qDebug() << writer.errorString() << "---" << writer.device()->errorString();
}
vllt. gibt dir das eine aussagekräftige Fehlermeldung.

Verfasst: 18. Februar 2011 13:10
von Sven K.

Code: Alles auswählen

  QImageWriter writer(Fn);//, "BMP");
  writer.write(Img);
ich erhalte als Fehlermeldung für writer.errorString() & writer.device()->errorString() beides mal "Unknown error"

Auf dem User System liefert QImageWriter::write auch kein false zurück, sondern legt eine .bmp datei an in der nur 54 Bytes geschrieben wurden. (sollten 900Kb sein)

Schreibrechte habe ich auf dem Userrechner, denn ein Textfile im selben Ordner kann ich schreiben.

Sven

Verfasst: 18. Februar 2011 13:38
von franzf
Wie erzeugst du das QImage? LIest du das aus einer Datei? Gibst du dem Image einen Raw-Input (Buffer)?
Könntest du vielleicht ein kompilierbares Minimlabeispiel posten, das an deinem Programmfluss angelehnt ist?

Verfasst: 18. Februar 2011 14:00
von Sven K.
ich will ein jpg File in ein 2 farbiges Bitmap umwandeln.

Code: Alles auswählen

QImage Img("C:\\buf.jpg");  
Img = Img.convertToFormat(QImage::Format_RGB32); 

for (int y = 0; y < Img.height(); ++y) 
{ 
  for (int x = 0; x < Img.width(); ++x) 
  {
     int pixel = Img.pixel(x, y);
     int gray  = qGray(pixel);
        
     if (gray > 127)  gray = 255;
     else                 gray = 0;

     int alpha = qAlpha(pixel); 
     Img.setPixel(x, y, qRgba(gray, gray, gray, alpha)); 
  }
}

//Img.save(Fn, "BMP", Qt::MonoOnly);

 QImageWriter writer(Fn);//, "BMP");
 writer.write(Img);

sven

Verfasst: 18. Februar 2011 17:20
von franzf
Ich habs mir ja schon gedacht :D
Deshalb bitte das nächste Mal gleich deinen Code posten, dann gibts gleich die richtige Antwort.
Für jpeg-Lesen brauchst du natürlich das jpeg-imageformats-plugin! Wie du das plugin verteilst, kannst du in den zahlreichen Beiträgen hier im Forum nachlesen (denke eine Suche nach imageformats sollte reichen).

Verfasst: 21. Februar 2011 09:44
von Sven K.
Danke,
habe die Lösungen im Forum gefunden!

Code: Alles auswählen

QApplication::addLibraryPath("./plugins");
hat mir weitergeholfen!
Sven