플랫폼 독립적 인 방법으로이 작업을 수행하고 싶습니다. libpng이 가능성을 알고 있지만 어떻게 처리하는지 파악하기가 어렵습니다. 누구든지 간단한 방법으로이 작업을 수행하는 방법을 알고 있습니까?C++에서 png에 간단한 이미지 버퍼 저장하기
답변
Png++
이라고하는 libpng
에 대한 C++ 래퍼가 있습니다. 그것을 확인하십시오 here 또는 그냥 구글.
템플릿과 실제 C++ 인터페이스가있어서 후드 아래 libpng
을 사용합니다. 필자가 작성한 코드가 상당히 표현력이 풍부하고 높은 수준이라는 것을 알았습니다.
하여 알고리즘의 핵심이다 "발전기"의 예 :
class PngGenerator : public png::generator< png::gray_pixel_1, PngGenerator>
{
typedef png::generator< png::gray_pixel_1, PngGenerator> base_t;
public:
typedef std::vector<char> line_t;
typedef std::vector<line_t> picture_t;
PngGenerator(const picture_t& iPicture) :
base_t(iPicture.front().size(), iPicture.size()),
_picture(iPicture), _row(iPicture.front().size())
{
} // PngGenerator
png::byte* get_next_row(size_t pos)
{
const line_t& aLine = _picture[pos];
for(size_t i(0), max(aLine.size()); i < max; ++i)
_row[i] = pixel_t(aLine[i] == Png::White_256);
// Pixel value can be either 0 or 1
// 0: Black, 1: White
return row_traits::get_data(_row);
} // get_next_row
private:
// To be transformed
const picture_t& _picture;
// Into
typedef png::gray_pixel_1 pixel_t;
typedef png::packed_pixel_row<pixel_t> row_t;
typedef png::row_traits<row_t> row_traits;
row_t _row; // Buffer
}; // class PngGenerator
및 사용은 다음과 같이이다 : 일부 여전히 libpng
에서 누락 된 비트 (인터리빙 옵션 등이 있었다
std::ostream& Png::write(std::ostream& out)
{
PngGenerator aPng(_picture);
aPng.write(out);
return out;
}
). 솔직히 나는 그들을 사용하지 않았다. 그래서 그것은 나에게 좋았다.
그것은 아름답다! 고맙습니다! – henle
나는이 아름다운 것을 발견하지 못한다. 어떻게 이것이 아름다운 것으로 간주 될 수 있습니까? 아무도 이것이 실제로 이미지를 표현하는 적절한 방법이라고 생각합니까? 그런 염증성 언어를 사용하는 것을 유감스럽게 생각하지만 프로그래밍에있어 PNG 이미지를 처리하는 데있어 좌절감을 느끼지는 못했습니다. 왜 더 복잡하게 만들어야합니까? –
저는 libpng이 여전히 가장 쉬운 방법이라고 말하고 싶습니다. example read -> process -> write png program이 있는데 오류 처리 (setjmp/longjmp/png_jmpbuf) 항목을 제거하면 상당히 간단합니다. 그것보다 간단하지 않습니다.
예, 나는 그것을 보았습니다. 나는 말해야한다, 나는 혼란 스러웠다. 그러나 지금 당신은 그것이 단순하다는 것을 나에게 이야기한다, 그것은 정말로이다;) – henle
- 1. C에서 StreamReader 및 버퍼 #
- 2. C에서 버퍼 길이 및 버퍼 오버플로 보내기
- 3. .NET에서 PNG에 대한 이미지 정보 추출
- 4. C에서 SaveFileDialog를 사용하여 파일 저장하기
- 5. C에서 사전을 사용하여 템플릿 저장하기 #
- 6. PNG에 대한 브라우저 지원
- 7. android에 이미지 저장하기
- 8. 죄책감으로 프로그램 이미지 저장하기
- 9. 이미지 프레임을 비디오에 저장하기
- 10. 파이썬에서 이미지 저장하기 3.1
- 11. 이미지 파일에 빙지도 저장하기
- 12. C에서 버퍼 (부호없는 char *) 연결
- 13. Objective-C에서 프로토콜 버퍼 사용
- 14. 버퍼 이미지 최적화
- 15. C에서 버퍼 오버플로를 잡을 수있는 도구는 무엇입니까?
- 16. iOS에 저장하기 전에 이미지 회전
- 17. PHP에서 URL의 투명한 이미지 저장하기
- 18. xlib XImage를 PNG에 저장
- 19. C에서 간단한 GUID 생성
- 20. C에서 순환리스트 (링 버퍼)를 어떻게 구현합니까?
- 21. .png 파일 (Cocoa OSX)에 32 비트 RGBA 버퍼 저장하기
- 22. C에서 깜박일 이미지 업로드
- 23. C에서 이미지 파일 저장
- 24. PNG에 포함 된 그래픽 문제
- 25. 코코아를 사용하여 PNG에 그림자를 추가하십시오.
- 26. 간단한 방법 C에서 VARIANT 유형 ++
- 27. Drupal : 노드를 저장하기 전에 CCK 이미지 업로드
- 28. .jpeg로 저장하기 위해 델파이로 큰 이미지 처리
- 29. DB 구조와 폴더 구조로 이미지 저장하기
- 30. 프레임 버퍼 320x480 이미지 크기 조정/2 = 프레임 버퍼 640x960 이미지 크기 조정 안함?
[Imagemagick] (http://www.imagemagick.org/script/index.php)을 사용할 수 있지만 다른 여러 가지 작업도 수행 할 수 있습니다. –