Funkcję tworzącą strukturę Image

0

Witam, mam do napisania program:
Należy napisać następującą strukturę i funkcje służące do pracy z obrazem:

  1. Strukturę Image zawierającą tablicę obrazu oraz informacje o jego szerokości i
    wysokości
  2. Funkcję tworzącą strukturę Image:
    struct Image CreateImage(int width, int height);
  3. Metodę nadającą tą samą jasność wszystkim pikselom w obrazie, np.:
    void fillInImage(struct Image* image, unsigned char
    value)
 #include <stdio.h>
#include <stdlib.h>
#include <time.h>

/* run this program using the console pauser or add your own getch, system("pause") or input loop */
typedef unsigned char byte; 

		typedef struct {  // stuktura obraz zawierajaca tablice i info o wys i szer
			int height;
			int width;
			byte **Ptab;
			}Image;


Image CreateImage(int width, int height)  // f-cja tworzaca strukture
		{
			byte **PTab = (byte**) malloc(height*sizeof(byte*)); 
			for (i=0; i<height; i++)
			PTab[i] = (byte*) malloc (width* sizeof(byte));
			return ??;
		} 


int main(int argc, char *argv[]) {
	
	srand(time(0));
	int h=0, w=0;
	int i=0, j=0;
	
	printf ("Podaj wysokosc obrazu: ");
	scanf ("%d", &h);
	printf ("Podaj szerokosc obrazu: ");
	scanf ("%d", &w);
	

	CreateImage(h,w);
	


	
	
		
	/*	for (i=0; i<height; i++)
		{
			for (j=0; j<width; j++)
				PTab[i][j]=rand()%255;
		}
		
		for (i=0; i<height; i++)
		{	
			for (j=0; j<width; j++)
				printf ("\t %03u ", PTab[i][j]);
				printf("\n");
		}

		
			
		for (i=0; i<height; i++)
		free(PTab[i]);
		free(PTab);
	
*/
	system("PAUSE");
	return 0;
	
}

Problem w tym ze nie bardzo wiem jak ta srukture stworzyc za pomoca funkcji? Co ta funkcja ma zwracac i w jaki sposob aby utworzyc nowa strukture?

2
typedef unsigned char byte; 
typedef struct 
  {
   unsigned width,height;
   byte colors[0];
  } Image;

Image *CreateImage(unsigned width,unsigned height)
  {
    Image *img=(Image*)malloc(sizeof(Image)+width*height);
    img->width=width;
    img->height=height;
   }

void FreeImage(Image *img)
  {
   free(img);
  }

void FillInImage(Image* img,unsigned char value)
  {
   /*wersja 1*/ // unsigned y,x,i; for(y=i=0;y<img->height;++y) for(x=0;x<img->width;++x) img->colors[i++]=value;
   /*wersja 2*/ // unsigned i; for(unsigned Size=img->width*img->height,i=0;i<Size;++i) img->colors[i]=value;
   /*wersja 3*/ memset(img->colors,value,img->width*img->height);
  }
0

Moglbys troche skomentowac Twoj kod bo nie czaje za bardzo. Na przyklad tej alokacji tablicy.

0

Zaczynam zastanawiać się czy przypadkiem wyrażenie "za bardzo" nie oznacza w języku polskim "absolutnie niczego" bo zawsze występuje w sugerującym właśnie to kontekście.
Idea jest taka że każdy obiekt Image ma jeden spójny fragment pamięci więc każdy Image może mieć inny rozmiar zależny od przechowywanych w nim danych.
W niektórych przypadkach pozwala to na szybsze i skuteczniejsze operowanie takimi strukturami.
Największą wadą tego rozwiązania, jest problem z rozbudową o dodatkowy dynamiczny element.

0

W moim programie zaalokowalem tablice, to ogarniam (tak mi sie wydaje). Ale u Dragona ta alokacja jest wgl inna.
Argumentem sizeof'a jest Image (struktura). I wgl to jes chyba alkokacja jednowymiarowej tablicy. Do tego dodawanie w funkcji malloc...
Po prostu nie wiem skad sie to bierze
moze nie napisalem wszystkiego to wkejam plecenie :)

Proszę napisać strukturę i zbiór funkcji implementujące dwuwymiarowy obraz
monochromatyczny (tzn. obraz w odcieniach szarości).
Wskazówki:

  1. Obrazy monochromatyczne przechowywane są w pamięci komputerów jako
    dwuwymiarowa tablica, której elementami są jasności kolejnych pikseli obrazu.
    Jasność każdego piksela może być reprezentowana przez 8 bitową liczbę naturalną,
    tzn. liczbę z przedziału 0 – 255 (unsigned char). Liczba 0 oznacza kolor czarny, 255 -
    biały.
  2. W programie wygodnie jest zdefiniować własną, krótszą nazwę (np. byte) dla typu
    unsigned char.
  3. Dwuwymiarowa tablica ma być alokowana dynamicznie.
  4. Zauważ że niektóre funkcje mają pewne wspólne instrukcje np. alokujące pamięć.
    Programując należy unikać duplikacji kodu, a zatem te wspólne instrukcje powinny
    być napisane w jednym miejscu.
0

Przecież wytłumaczyłem w poście wyżej.

1 użytkowników online, w tym zalogowanych: 0, gości: 1