Ich lerne C und meine Aufgabe ist 24bit Bitmaps zu ändern. Was ich bisher getan haben:Segmentation Fault mit Bitmaps und Malloc
-Correctly geschriebenen Code, die Kopien und aktualisiert die Header
-Correctly Code geschrieben, der das Bild vertikal
das Auffüllen funktioniert Ich möchte jetzt
passt die Größe haben es schreibt, um die Größe veränderten Linien zu einem Middleman, damit ich ihn f mal auf die outfile schreiben kann, etwa so:
// save scanline
FILE* scanline = malloc(sizeof(bi.biWidth) * sizeof(RGBTRIPLE));
// iterate over infile's scanlines
for (int i = 0, biHeight = (abs(bi.biHeight)/f); i < biHeight; i++)
{
// iterate over pixels in scanline
for (int j = 0; j < (bi.biWidth/f); j++)
{
// temporary storage
RGBTRIPLE triple;
// read RGB triple from infile
fread(&triple, sizeof(RGBTRIPLE), 1, inptr);
for(int z = 0; z < f; z++)
{
// write RGB triple to outfile
fwrite(&triple, sizeof(RGBTRIPLE), 1, scanline);
}
}
// Add Padding to Outfile
for (int k = 0; k < padding2; k++)
{
fputc(0x00, scanline);
}
// skip over padding, if any
fseek(inptr, padding, SEEK_CUR);
for(int s = 0; s < f; s++)
{
// write RGB triple to outfile
fwrite(scanline, sizeof(RGBTRIPLE), 1, outptr);
}
}
Mein Problem ist, (dies war mit einem Debugging-Tool herausgefunden), dass immer, wenn es in die Scanline-Datei schreiben muss, ich einen Segmentierungsfehler bekomme. Vielen Dank im Voraus und ich habe versucht, dafür zu sorgen, dass ich die Gemeinschaftsrichtlinien nicht verletze, aber wenn ich versagte, entschuldige ich mich. Hab einen Guten!
Große, ich glaube, das ist es! Wenn es dir nichts ausmacht, habe ich nur eine kurze Folge. Ich versuche jetzt diese Zeile wie folgt: FILE * scanline = fopen (Scanline, "w"); –
Großartig, ich denke das war's! Wenn es dir nichts ausmacht, habe ich nur eine kurze Folge. Ich versuche jetzt diese Zeile so: FILE * scanline = fopen (Scanline, "w"); Das gibt mir jedoch einen unitären Fehler. Außerdem: bi ist eine Abkürzung für Bitmapinfoheader, wo Dinge wie Länge und Breite in Pixeln definiert sind, RGBTRIPLE ist die Pixelfarbe wie von Microsofts bmp Header definiert und sowohl die Infile als auch die Outfile sind FILE * Ich denke, das sollte der Typ für Scanline sein. Danke für Ihre Hilfe, es wird sehr geschätzt! –
Bitte sehen Sie sich die Parameter und den Rückgabetyp von fopen an – Gerhardh