Bitmaps drehen .... und Dateinamenproblem .... ????
-
Hallo,
hab da ein rießiges Problem!!!!
Ich bin gerade dabei auf Basis der Cbitmap-Klasse aus dem Windows95 DDK einen Druckertreiber für Windows98 zu erstellen der Bitmaps erzeugt.
Das funktioniert soweit schon sehr gut!Allerdings werfen sich nun 2 Probleme auf!
Zum Einen werden alle Bitmaps verkehrt herum ausgegeben, d.h. konkret gesagt, die linke obere Ecke ist links unten!
Ich habe bereits im www den Hinweis gefunden, dass wenn die Höhe des Bitmaps ein positiver Wert ist, das Bitmap verkehrt herum ausgegeben wird.
Ich habe deshalb den Wert in einen negativen umgewandelt, aber ohne Erfolg.
Ich hoffe ihr habt Rat für mich, da ich schon am verzweifeln bin.Das zweite Problem ist die Ausgabe in die Datei.
Ich kann keinen Dateinamen verwenden der länger als 8 Zeichen + Dateierweiterung ist. Auch hierzu finde ich leider nicht den geringsten Hinweis!Bin für jeden Hinweis in tiefster Weise dankbar!!!
Gruß KTMRACER
[ Dieser Beitrag wurde am 19.02.2003 um 14:41 Uhr von ktmracer editiert. ]
-
fang doch von hinten an zu lesen und arbeite dich dann nach vorne oder lies die komplette datei in den speicher und tausche entsprechend bytes. du könntest auch mit stacks arbeiten und pixel für pixel(vom anfang an) drauf-pushen und dann wieder poppen. dann ist es genau andersrum
cu todo
[ Dieser Beitrag wurde am 19.02.2003 um 14:50 Uhr von todo editiert. ]
-
für das zweite problem sollte man dich mal ins WinAPI-Forum verschieben
-
Original erstellt von todo:
**fang doch von hinten an zu lesen und arbeite dich dann nach vorne oder lies die komplette datei in den speicher und tausche entsprechend bytes. du könntest auch mit stacks arbeiten und pixel für pixel(vom anfang an) drauf-pushen und dann wieder poppen. dann ist es genau andersrumcu todo
[ Dieser Beitrag wurde am 19.02.2003 um 14:50 Uhr von [qb]todo** editiert. ][/QB]
Leider bin ich dem mächtigen C++ noch nicht ganz Herr geworden, d.h. ich weiß nicht wie ich deinen Rat umsetzten soll! Kannst du mir da evtl. ein Beispiel dafür geben?
-
um die datei zu drehen muss du genaueres über das bmp format wissen, z.b. darfst du den header nicht mit umdrehen
aber vielleicht weiss ein winapi gutru eine besser lösung,
thread verschoben ins winapi forum WinAPI
-
Also am einfachsten ist da immernoch folgende Vorgehenswise:
Bitmap laden (LoadImage(...))
Bitmap- Bytes holen (GetBitmapBits(..))
Bytes "rumdrehen" :BYTE* CImgProc::ReverseBytes(BYTE *inBytes, int width, int height, int BitDepth) { int iNumber = (width * height * BitDepth) / 8; int ByteWidth = (width * BitDepth) / 8; BYTE *outBytes = new BYTE[iNumber]; for(int z = 0; z < height; z++) for(int n = 0; n < (width * BitDepth) / 8; n++) outBytes[(( iNumber - ByteWidth )-( z * ByteWidth )) + n] = inBytes[( z * ByteWidth ) + n]; return outBytes; }
BitmapBytes zurückschreiben (SetBitmapBits(..))
und feritig ist das gedrehte Bitmap....
Bitmaps werden immer "verkehrt herum" abgespeichert. Solang man nur visualisiert, sollte das aber eigentlich egal sein. Frühestens beim Speichern stolpert man aber über diese Problematik.