Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

riCo

Treue Seele

  • »riCo« ist der Autor dieses Themas

Beiträge: 165

Beruf: Student

  • Private Nachricht senden

1

15.08.2006, 13:59

Bitmap aus Bitmap ausschneiden

Hallo,
ich möchte aus einem großen Bitmap ein kleines Bitmap ausschneiden. Mein Problem: LoadBitmap oder LoadImage kann ich nicht nehmen. Ich muss es mit CFile(o.ä. Funktionen) machen. LoadImage, LoadBitmap sowie DirectX kann ich NICHT verwenden!
Weiss einer, wie ich das machen kann oder hat schon eine Funktion dafür?
Wir leben alle unter dem Sternenhimmel, aber wir haben nicht alle den gleichen Horizont.

Anonymous

unregistriert

2

15.08.2006, 14:00

1. Falsches Forum
2. WARUM kannst du DirectX, usw nicht verwenden?

koschka

Community-Fossil

Beiträge: 2 862

Wohnort: Dresden

Beruf: Student

  • Private Nachricht senden

3

15.08.2006, 14:18

zu 1.) verschoben
zu 2.) weil es für 2D absolut überflüssig ist, man könnte es vergleichen mit einer Kanone, die auf Spatzen zielt und doch keinen trifft


Die Funktion BitBlt, mit welcher du das Handle auf das Bmp blittest. Schau dir die beschreibung von nWidth, nHeight, nXSrc, nYSrc an. Du lädst ganz normal das ganze Bitmap mit LoadImage und Blittest dann deine Regionen heraus. Mit StretchBlt kannst du zudem noch strecken.

riCo

Treue Seele

  • »riCo« ist der Autor dieses Themas

Beiträge: 165

Beruf: Student

  • Private Nachricht senden

4

15.08.2006, 14:19

Weil ich das ganze unter embedded C++ programmiere für ein kleines Gerät und man dort kein DirectX zur Verfügung hat. :-) Bitmaps kann man dort nur als Ressourcen direkt verarbeiten. Das Bitmap ist 200MB groß und ausserdem will ich, dass die Bilder geändert werden können. Ich stelle es mir so vor, dass ich das Bitmap mit CFile öffne und einlese(soweit kein Problem). Dann muss ich aber einen Bereich rausschneiden und das ganze als Bitmap speichern oder direkt in den Bildschirmspeicher schreiben!

Da versagt mein Wissen allerdings..

PS: Auslegungssache, ob dieser thread lieber hier her gehört oder unter C++ Programmierung :-) Aber ist ok.. du chef, ich nix. :p
Wir leben alle unter dem Sternenhimmel, aber wir haben nicht alle den gleichen Horizont.

koschka

Community-Fossil

Beiträge: 2 862

Wohnort: Dresden

Beruf: Student

  • Private Nachricht senden

5

15.08.2006, 14:21

Wenn du auf ein anderes Bitmap blitten wilst, einfach bei HDC Destination nicht das Ausgabegerät nehmen sondern die neue Bitmap z.B. mit CreateBitmap? oder so ähnlich ;)

big_muff

Alter Hase

Beiträge: 460

Wohnort: Schweiz

Beruf: Informatikstudent (4. Semester)

  • Private Nachricht senden

6

15.08.2006, 14:24

Also zum Ausschneiden:
Zur Vereinfachung gehen wir davon aus, ein Pixel deiner Bitmap ist ein Byte gross (du kannst das dann einfach anpassen).
Wenn du die Bitmap eingelesen hast, hast du einen Speicherbereich voller BYTE-Werte (*pSrcPixel) und die Auflösung der Bitmap (xSrcRes, ySrcRes). Ausserdem sollte die Auflösung der Ziel-Bitmap bekannt sein (xDestRes, yDestRes) und die Position von welcher du einen Bereich ausschneiden willst (xPos, yPos). Zeichnung zur Veranschaulichung: KlickMich

Du reservierst zuerst Speicher für die Ziel-Bitmap:

C-/C++-Quelltext

1
BYTE *pDestPixel = new BYTE[xDestRes*yDestRes]


Danach kopierst du einfach die einzelnen Pixel aus der Quell-Bitmap in die Ziel-Bitmap:

C-/C++-Quelltext

1
2
3
4
5
6
7
for(int y=0; y<yDestRes; y++)
{
    for(int x=0; x<xDestRes; x++)
    {
        pDestPixel[y*yDestRes+x]=pSrcPixel[(y+yPos)*ySrcRes+(x+xPos)];
    }
}


Achtung: Code nicht getestet!, aber vom Prinzip her müsste es funktionieren.
Nur Idioten halten Ordnung, ein Genie beherrscht das Chaos.[size=7]

[/size]HardFate - Ein Start, Ein Ziel, Viele Wege[size=7]

[/size]Ein Mitglied der VEGeiCoUndGraSonMaWiGeS Bewegung.

riCo

Treue Seele

  • »riCo« ist der Autor dieses Themas

Beiträge: 165

Beruf: Student

  • Private Nachricht senden

7

16.08.2006, 08:28

Danke BigMuff, soweit war ich aber schon. :D
Übrigens: Ich mach alles mit einem CFile Objekt, da ich das Bitmap mit den normalen Bitmapfunktionen NUR aus Ressourcen laden kann. Ich lese den Info-Header, File-Header und Farb-Header aus. Ich muss nur noch herausfinden, wie ich das ganze in ein HDC bekomme, um die Funktion Funktionen BitBlt() zu benutzen. Andererseits weiss ich ja, dass ich ein 8Bit-BitMap verwende und somit ist 1 Pixel 1 Byte. Notfalls kann ich mit die Funktion dafür auch selbst schreiben.

Verarbeitung von Bitmaps wäre auch mal was für die Tutorial-Sektion?
Wir leben alle unter dem Sternenhimmel, aber wir haben nicht alle den gleichen Horizont.

Werbeanzeige