8
A
답변
3
여기는 PPM specification입니다.
PPM 파일은 공백으로 구분 된 9 개의 섹션으로 구성됩니다.
- 파일을 엽니 다
- 첫 번째 공백까지 읽기 및
P6
있어 확인. 그런 다음 다른 공백을 건너 뜁니다. - 다음 공백까지 읽기, 버퍼를 정수 너비로 변환하십시오. 그런 다음 다른 공백을 건너 뜁니다.
- 다음 공백까지 읽을 수 있도록 버퍼를 정수 높이로 변환하십시오. 이어서
- 라인에 의해 MAX-브로
- 판독 라인을 판독 높이 * 폭
- 의 크기의 정수의 2 차원 배열을 할당 다른 화이트 스페이스를 생략하고 어레이
+2
이 답변에서 어떤 일이 일어나는지 분명히해야한다고 생각합니다. 명확하지 않습니다. –
+1
주석 행을 고려하지 않으므로 많은 PNM 파일에서 실패합니다. – deegee
18
에게 다음 코드를 작성 읽기, 픽셀 색 변경 및 이미지를 PPM 형식으로 작성하는 방법을 보여줍니다. 나는 그것이 도움이되기를 바랍니다.
#include<stdio.h>
#include<stdlib.h>
typedef struct {
unsigned char red,green,blue;
} PPMPixel;
typedef struct {
int x, y;
PPMPixel *data;
} PPMImage;
#define CREATOR "RPFELGUEIRAS"
#define RGB_COMPONENT_COLOR 255
static PPMImage *readPPM(const char *filename)
{
char buff[16];
PPMImage *img;
FILE *fp;
int c, rgb_comp_color;
//open PPM file for reading
fp = fopen(filename, "rb");
if (!fp) {
fprintf(stderr, "Unable to open file '%s'\n", filename);
exit(1);
}
//read image format
if (!fgets(buff, sizeof(buff), fp)) {
perror(filename);
exit(1);
}
//check the image format
if (buff[0] != 'P' || buff[1] != '6') {
fprintf(stderr, "Invalid image format (must be 'P6')\n");
exit(1);
}
//alloc memory form image
img = (PPMImage *)malloc(sizeof(PPMImage));
if (!img) {
fprintf(stderr, "Unable to allocate memory\n");
exit(1);
}
//check for comments
c = getc(fp);
while (c == '#') {
while (getc(fp) != '\n') ;
c = getc(fp);
}
ungetc(c, fp);
//read image size information
if (fscanf(fp, "%d %d", &img->x, &img->y) != 2) {
fprintf(stderr, "Invalid image size (error loading '%s')\n", filename);
exit(1);
}
//read rgb component
if (fscanf(fp, "%d", &rgb_comp_color) != 1) {
fprintf(stderr, "Invalid rgb component (error loading '%s')\n", filename);
exit(1);
}
//check rgb component depth
if (rgb_comp_color!= RGB_COMPONENT_COLOR) {
fprintf(stderr, "'%s' does not have 8-bits components\n", filename);
exit(1);
}
while (fgetc(fp) != '\n') ;
//memory allocation for pixel data
img->data = (PPMPixel*)malloc(img->x * img->y * sizeof(PPMPixel));
if (!img) {
fprintf(stderr, "Unable to allocate memory\n");
exit(1);
}
//read pixel data from file
if (fread(img->data, 3 * img->x, img->y, fp) != img->y) {
fprintf(stderr, "Error loading image '%s'\n", filename);
exit(1);
}
fclose(fp);
return img;
}
void writePPM(const char *filename, PPMImage *img)
{
FILE *fp;
//open file for output
fp = fopen(filename, "wb");
if (!fp) {
fprintf(stderr, "Unable to open file '%s'\n", filename);
exit(1);
}
//write the header file
//image format
fprintf(fp, "P6\n");
//comments
fprintf(fp, "# Created by %s\n",CREATOR);
//image size
fprintf(fp, "%d %d\n",img->x,img->y);
// rgb component depth
fprintf(fp, "%d\n",RGB_COMPONENT_COLOR);
// pixel data
fwrite(img->data, 3 * img->x, img->y, fp);
fclose(fp);
}
void changeColorPPM(PPMImage *img)
{
int i;
if(img){
for(i=0;i<img->x*img->y;i++){
img->data[i].red=RGB_COMPONENT_COLOR-img->data[i].red;
img->data[i].green=RGB_COMPONENT_COLOR-img->data[i].green;
img->data[i].blue=RGB_COMPONENT_COLOR-img->data[i].blue;
}
}
}
int main(){
PPMImage *image;
image = readPPM("can_bottom.ppm");
changeColorPPM(image);
writePPM("can_bottom2.ppm",image);
printf("Press any key...");
getchar();
}
관련 문제
- 1. 목표 c xml을 읽고 배열에 저장하십시오.
- 2. 파일을 읽고 배열에 넣으시겠습니까?
- 3. 파일에서 읽고 구조에 저장하십시오
- 4. 배열에 javascript 변수를 저장하십시오.
- 5. 배열에 C로 문자열을 채우려면 어떻게해야합니까?
- 6. 파일을 읽고 임의의 값을 bash 스크립트의 변수에 저장하십시오.
- 7. C#에서 PPM 이미지 읽기
- 8. 안드로이드에 배열에 .txt 파일 이름을 저장하십시오.
- 9. 파일을 사용자 데스크탑에 저장하십시오.
- 10. JMeter에서 파일을 다운로드하고 저장하십시오.
- 11. 여러 파일을 읽고 쓰는 방법은 무엇입니까?
- 12. C에서 .ppm 파일 자르기
- 13. 텍스트 파일을 문자열 배열로 일반 c로?
- 14. 코드화 된 plist 파일을 열 수 없습니다.
- 15. DataGridView에서 열을 읽고 문자열 배열에 배치하십시오.
- 16. Android : 텍스트 파일에서 double을 읽고 배열에 넣기
- 17. 전체 ini 섹션을 읽고 배열에 넣으십시오.
- 18. 자바에서 파일을 읽고 쓰자.
- 19. zip 파일을 다운로드하여 sdcard에 저장하십시오.
- 20. 파일을 사용하여 optparse 인수를 저장하십시오.
- 21. db 액세스 파일을 pendrive에 저장하십시오.
- 22. C의 PPM 이미지 읽기
- 23. glut을 사용하여 ppm 파일로드
- 24. Perl, ppm 및 모듈 종속성을 다운로드하려고 시도했습니다.
- 25. JAI를 사용하여 48 비트 PPM (PNM)을 읽고 24 비트 jpeg로 저장
- 26. Dll의 콘텐츠를 프로그래밍 방식으로 읽고 Silverlight의 다른 파일에 저장하십시오.
- 27. PHP의 LiveDocx를 사용하여 .doc 및 .docx 파일을 읽고 그 내부의 텍스트를 읽고 HTML로 저장하는 방법은 무엇입니까?
- 28. 동일한 파일을 읽고 쓰는 중
- 29. MSBuild로 .ini 파일을 읽고 편집하십시오.
- 30. PHP에서 dat 파일을 읽고 쓰십시오.
어떤 부분에 문제가 있습니까? 제대로 작동하지 않는 시도를 게시하면 쉽게 버그를 찾을 수 있습니다. – caf