Diskuze: Rámeček u obrázku

C++ C a C++ Rámeček u obrázku

Avatar
D8sGust
Člen
Avatar
D8sGust:

Prosím vás, nevíte někdo jak vytvořit rámeček u obrázku ? Tak, aby se změnili okrajové pixely na jinou barvu a každá strana měla jinou barvu.

 
Odpovědět 28.11.2014 10:42
Avatar
Odpovídá na D8sGust
Luboš Běhounek (Satik):

Otevřít obrázek, upravit krajní pixely, zavřít obrázek.

Jednodušší než C/C++ by bylo použít třeba C#, tam by to byl kód na 5 řádků.

Nahoru Odpovědět  ±0 28.11.2014 11:56
:)
Avatar
D8sGust
Člen
Avatar
Odpovídá na Luboš Běhounek (Satik)
D8sGust:

Bylo by to jednoduché, ale mám za úkol to udělat v Céčku a netuším jak. Jediné co zmůžu je změnit dole pixel a když to dám do cyklu, mění se to úplně jinde než chci.

 
Nahoru Odpovědět 29.11.2014 19:44
Avatar
Nahoru Odpovědět 29.11.2014 20:33
:)
Avatar
D8sGust
Člen
Avatar
D8sGust:

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>

// test ukazatele

// napověda na encyklopedii wiki
int main()
{
FILE* soubor = fopen("lena.bmp", "r+b");
if (soubor == NULL)
{
perror("Chyba pri otevirani souboru");
return 0;
}
// zjistit delky souboru
if (fseek(soubor, 0, SEEK_END) != 0)
{
perror("Chyba fseek");
goto close; // pouzivat jen vyjmecne
}

// pouze bin rezim
long delkaSouboru = ftell(soubor);
if (delkaSouboru == EOF)
{
perror("Chyba ftell");
goto close;
}
printf("Delka souboru je %ld bytu. \n", delkaSouboru);
// alokujeme pamet pro pole bytu na halde, probereme priste
unsigned char* buffer = malloc(delkaSou­boru* sizeof(unsigned char));
if (buffer == NULL)
{
perror("Chyba pri alokaci pameti na halde");
goto close;
}
rewind(soubor); // pretocime na zacatek
size_t nacteno = fread(buffer, sizeof(unsigned char), delkaSouboru, soubor);
if (nacteno != delkaSouboru)
{
perror("Chyba pri cteni souboru");
goto free;
}

int offset = ((int)(buffer + 18));
int sirka = ((int)(buffer + 18));
int vyska = ((int)(buffer + 22)); // posun o 18 B unsigned char jeden B

unsigned char* pixely = buffer + offset;

/*pixely[0] = 255; // blue
pixely[1] = 255; //green
pixely[2] = 255; // red
pixely[200] = 255; */
for (int x = 0; x <100; x++)
{
pixely[x] = 255;
}
// dalsi sloupec je sirka * 3

rewind(soubor);
size_t ulozeno = fwrite(buffer, sizeof(unsigned char), delkaSouboru, soubor);

if (ulozeno != delkaSouboru)
{
perror("Chyba pri ukladani souboru");
goto free;
}

printf("%d x %d \n", vyska, sirka);

free:
free(buffer);
close:
if (fclose(soubor) == EOF)
{
perror("Chyba pri zavirani souboru");
}
return 0;
}
"Velikost obrázku by měla být 512x512. Jde mi hlavně o ty funkce Pixely[1] apod. s tím cyklem."

 
Nahoru Odpovědět 30.11.2014 13:50
Avatar
Libor Šimo (libcosenior):

Veľmi do toho nevidím, ale táto časť vyhadzuje chybu:

for (x = 0; x <100; x++)
    {
        pixely[x] = 255;
    }
Nahoru Odpovědět 30.11.2014 15:57
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
D8sGust
Člen
Avatar
D8sGust:

Nešlo by to nějak upravit, aby to změnilo okrajové pixely ? Ostatní by mělo být dobře, jen tento cyklus nějak opravit.

 
Nahoru Odpovědět 30.11.2014 18:21
Avatar
Odpovídá na D8sGust
Libor Šimo (libcosenior):

unsigned char* buffer = malloc(delkaSou­boru* sizeof(unsigned char));
toto
s týmto
int offset = ((int)(buffer + 18));
int sirka = ((int)(buffer + 18));
int vyska = ((int)(buffer + 22));
sa mi nezdá, ale neriešil som to

Nahoru Odpovědět 30.11.2014 19:41
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
D8sGust
Člen
Avatar
D8sGust:

A vy jak by jste napsali program, aby to udělalo rámeček ? Nějaký universal, já už bych se s tím potom pohrál.

 
Nahoru Odpovědět 30.11.2014 22:00
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 9 zpráv z 9.