Matrix(bild) drehen



  • Hallo, ich habe ein programm geschrieben, dass mir aus einem pixel array(rgb) eine bitmap erstellt nun will ich diese aber drehen (diagonal spiegeln oder transponieren währe auch okay), theoretishc sollte mein code funktionieren, das echte bild ist korrekt, das gedreht ergibt aber leider verschobene udn fablich falsche ergebnisse,

    vorallem wundert mich die farbverschiebung, was an sich nicht sein sollte.
    hat jemand ne idee?

    struct pixel* sidewrite(char *side_line,struct pixel colour){
    	int i;
    	int j;
    	int height=50;
    	int width=500;
    	int realheight=width;
    	int realwidth=height;
    	struct pixel *side=NULL;
    	struct pixel *realside=NULL;
    	struct pixel white={255,255,255};
    	int current_x=0;
    	int current_y=34;
    	int line=0;
    	side=malloc(height*width*sizeof(struct pixel));
    	if(side==NULL) return NULL;
    	for(i=0;i<height*width;i++){
    		side[i]=white;
    	}
    	for(i=0;width-current_x>16 || line<(int)(height/16);i++){ //füllen des bildes (funktioniert)
    		if(side_line[i]=='\0')break;
    		if(width-current_x<16 || side_line[i]=='\n'){ current_x=0; line++; current_y-=16;}
    		if(side_line[i]!='\n')put_letters(side,width ,colour,&current_x,&current_y, side_line[i]);
    	}
    
    	realside=malloc(height*width*sizeof(struct pixel)); // zwischen hier
    	if(realside==NULL) return NULL;
    	for(i=0;i<height;i++){
    		for(j=0;j<width;j++){
    			realside[height*j+i]=side[width*i+j]; 
    		}
    	}	//und heir denke ich ist das Problem
    
    	create_bmp(side,width,height, "sidetop_test.bmp");
    	create_bmp(realside,realwidth,realheight, "side_test.bmp");
    	free(side);
    	return realside;
    }
    

    oh ja udn das struct pixel sit flgender maßen definiert:

    struct pixel{
     char b
     char g
     char r
    


  • tipp: die Pixelwerte liegen immer in einem mehreren Byte großen Bereich mit den Werten direkt hintereinander. wenn du das Bild aber Byteweise tauschst, dann tun sie es am Ende nicht mehr.


Anmelden zum Antworten