Bild drehen

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
Ynnus
Beiträge: 855
Registriert: 29.08.2004 01:37
Kontaktdaten:

Beitrag von Ynnus »

In PureBasic-Pointern bin ich eigentlich nur wenig bewandert, das kommt nur dadurch, dass man manches aus C anwenden kann. :mrgreen:
Die einzige Möglichkeit die ich in Verbindung mit auf Fenster Zeichnen kenne wär' jetzt die Bitmap-Daten in einem Speicherbuffer von bytes zu haben und dann mittels eines DeviceDependendBitmap (DIB wär auch möglich) auf ein Fenster zu klatschen. Dabei kann man das Bitmap im Speicherbuffer verändern, neu dem Bitmap-Objekt zuweisen und zeichnen. Die Frage ist, ob die GDI das flott genug hinbekommt. Dann hätte man die Möglichkeit, das Bild im Speicher zu drehen, das Problem ist da nur, dass es ja die Proportionen ändert beim Drehen. Es wird breiter und höher durch das Aufrichten der Längsseiten usw. Also müsste der Speicherbuffer schon von vorne herein genügend Platz lassen um das Bitmap voll drehen zu können ohne das dieses aus dem Speicher heraus platzt.

Vielleicht könnte man sich auch den Memory Device Context des Fensters heranziehen, was ja afaik das Fensterabbild im Speicher ist und dort die Daten manipulieren. Damit hab ich mich aber noch nicht befasst.
Und ob die GDI da eben flott genug ist, ist die Frage.

Wenn du das so machen möchtest würde ich keine PB-Bitmaps verwenden sondern mittels WinAPI eigene Bitmap-Objekte erstellen. Die sind einsichtig was die Bit-tiefe, die Dimensionen usw. betrifft. Auch lässt sich da eben leicht ein Speicherbereich als Bits für das Bild zuweisen. Das Bild kann also leichter manipuliert werden. Denn wie man in PureBasic die Speicheradresse der Images bekommt weiß ich nicht, und wie man dann damit verfährt.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

*räusper*
Sunny hat geschrieben:keine PB-Bitmaps verwenden sondern mittels WinAPI eigene Bitmap-Objekte erstellen. Die sind einsichtig was die Bit-tiefe, die Dimensionen usw. betrifft
es gibt keine "PB-Bitmaps"
und die Speicherorganisation ist bei geladenen bitmaps ebenso durchsichtig,
wie bei selbstgeschraubten.

@PureLust
((Sorry, ich grins mal, ich muß bei deinem namen immer an die "geile" Shampoo-Werbung denken))

vielleichicht hilft dir dieses "ältere" thema:
http://forums.purebasic.com/german/view ... 51&start=0
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Ynnus
Beiträge: 855
Registriert: 29.08.2004 01:37
Kontaktdaten:

Beitrag von Ynnus »

Ich finde, die PB Bitmaps sind weniger durchschaubar wie die der WinAPI. Damit braucht man nämlich erst alle Teile und setzt diese dann zusammen zu einem Bitmap. Bei PB sagt man einfach CreateImage() und fertig. Wo ist da die Transprenz wie viele Bit er nimmt, wo die Bit im Speicher sind?
Es sind im Endeffekt zwar auch WinAPI-Images, aber es werden doch Infos vorenthalten zu Gunsten der Vereinfachung der Nutzung. Nur, wenn man näher ran will, muss man sich erst alles zusammensuchen. Da nimmt man besser den komplizierteren Weg über die WinAPI-Funktionen direkt und hat alles was man braucht.
Benutzeravatar
Andre
PureBasic Team
Beiträge: 1765
Registriert: 11.09.2004 16:35
Computerausstattung: MacBook Core2Duo mit MacOS 10.6.8
Lenovo Y50 i7 mit Windows 10
Wohnort: Saxony / Deutscheinsiedel
Kontaktdaten:

Beitrag von Andre »

Sunny hat geschrieben:Könnte man direkt ins Code, Tipps und Tricks Forum aufnehmen (+ Code-Archiv wenn Andre das mal wieder aktualisiert).
Code ist schon abgespeichert. :)
(Ein Grund: trotz der nicht überragenden Geschwindigkeit, er ist dafür aber mit reinen PB-Befehlen gemacht.)
Bye,
...André
(PureBasicTeam::Docs - PureArea.net | Bestellen:: PureBasic | PureVisionXP)
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

@sunny

im ggs. zu API ist Image aber plattformunabhängig.

außerdem schau dir mal die Help zu Image an:

ImageDepth()

ImageHeight()

ImageWidth()

...und es gab auch ne möglichkeit, an den Pointer zu kommen...

also, ich seh da kein problem...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Ynnus
Beiträge: 855
Registriert: 29.08.2004 01:37
Kontaktdaten:

Beitrag von Ynnus »

Ok, wie kommt man an die genauen Bit des Images ran? Ich hätte das gerne als Speicherbereich, 2-Dimensional im Format des Bildes (etwa (300,300) für entsprechende Pixel).
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

Code: Alles auswählen

pointer + depth* ( x + width *y )
so what?


korrektur: depth ist die anzahl bit...

Code: Alles auswählen

pointer + (depth* ( x + width *y )) /8
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Ynnus
Beiträge: 855
Registriert: 29.08.2004 01:37
Kontaktdaten:

Beitrag von Ynnus »

Auf was zeigt denn der Pointer? So erhälst du nur eine leere Variable. Erstell mal ein Image und lass den auf die Byte im Speicher zeigen. Und dann kannst du das Image ja auch gleich per Änderung der Byte umfärben.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

Sunny hat geschrieben:Auf was zeigt denn der Pointer?
na, auf das Image!

a bissel mitdenge musst scho, wann de mit mir dischkutiere wills.
Sunny hat geschrieben:Und dann kannst du das Image ja auch gleich per Änderung der Byte umfärben.
worum ging es dir denn sonst?

wills du mich eigentlich veräppeln?
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Ynnus
Beiträge: 855
Registriert: 29.08.2004 01:37
Kontaktdaten:

Beitrag von Ynnus »

Mir geht es darum, mittels Speichermanipulation die Bit (bzw. byte) eines Images zu ändern. Dafür benötigt man also den Speicherbereich des Images. Und bisher hab ich außer einer Zeile mit leerem Pointer noch nicht viel gesehen. Wo steht denn die Zeile wo du die Speicheradresse des Images in einem Pointer ablegst?
Antworten