2017-09-04 12 views
0

이 이미지를 사용하여 이미지의 밝기를 조정하는 기능을 내 프로그램에 추가하려면 link을 사용하십시오. 이 코드는 정상이지만 밝기를 조정하는 데 시간이 걸립니다 (이미지 파일 크기 1.8MB). 저품질 이미지를 시도하면 즉시 이미지 (이미지 파일 크기 100KB)가 조정됩니다. 이미지의 밝기를 조정하는 효과적인 방법이 있습니까?큰 이미지의 이미지 밝기 C#

+0

더 낮은 수준의 접근 방식을 사용하여 편집 할 수 있습니다. http://www.vcskicks.com/fast-image-processing.php – leAthlon

+0

큰 이미지 (100kB 대 1.8MB)와 비교할 때 아주 작은 이미지로 작업 할 때마다 차이가 있습니다. 그러면이 질문에 대한 해결책에서 무엇을 기대할 수 있습니까? – Fildor

+1

코드는 일반 비트 맵에서 SetPixel을 사용하는 것으로 보입니다. 느린 sooo이기 때문에 이것은 나쁜 생각입니다. 대신 a) LockBits 또는 b) FastBitmap 또는 c) ColorMatrix를 사용하십시오! 여기와 웹 주변에 많은 예제가 있습니다. – TaW

답변

2

코드는 BitmapsGetPixelSetPixel을 사용하는 것 같습니다. 너무 느리기 때문에 이것은 나쁜 생각입니다.

Bitmap의 단일 픽셀을 조작하려면 (Get/SetPixel이 장면 뒤에서 Get/SetPixel이 수행해야 함) 픽셀 단위로 수행해야하므로 1000x1000 크기 이미지의 경우 백만 번 잠금/잠금 해제 작업을 수행해야합니다. 공연. 이것은 엄청난 오버 헤드를 만듭니다.

방법이 문제를 피하기 위해 하나

한 가지 방법은 LockBits 기능 전체 비트 맵을 잠그는 것입니다. 이제 픽셀을 반복하여 수정할 수 있습니다. 이 방법에 대한

두 노트 :

  • 우리가 지금에 액세스 무엇 각 픽셀의 원시 바이트, 즉, 각 채널은 별도입니다 : BGR 또는 BGRA 중, 픽셀 포맷에 따라 달라집니다. 즉, 채널은 이고 색상 방법의 일반적인 RGB/ARGB 형식의 물리적으로 반전 된입니다.

  • 실제 비트 맵 픽셀 행을 반복하려면 행을 4 바이트의 배수로 채우는 각 행에 stride을 추가해야합니다. 또한 see here

은 몇 가지 예를 들어 당신은 some of these posts를 통해 검색 할 수 있습니다. 유연한 작업을 위해 대리자를 사용하는 특히 this one에 유의하십시오.

(이들이 결합 된 이미지를 목표로하기 때문에 포스트의 몇몇은 2 또는 3 고정 비트 맵을 사용하는 것이 주 ..)

방법 두

로킹 화소 하나의 오버 헤드를 해결하기 위해 또 다른 방법 하나는 스스로를 전체적으로 잠그는 데 도움이되는 기성품 비트 맵 클래스입니다. Herehere은 내가 직접 시도하지 않은 예입니다.

방법 세 가지

마지막으로 정말 빨리 모두 비교적 간단하고있다 이미지 조작을위한 매우 우아한 방법이있다; 최고의 결과를 얻기 위해 전문적으로 제작되었습니다. ColorMatrix을 설정할 수 있습니다.

밝기, 감마, 색조를 변경할 수 있습니다. Here is a very nice introduction.

단점은 일부 고정 작업에만 국한되므로 photoshop-type layer modes 또는 기타와 같은 다른 멋진 항목에 대한 맞춤 필터를 만들 수 없다는 것입니다. 특히 인접한 픽셀을 처리해야하는 필터가 필요합니다. 흐리게하기 위해 ..

하지만 밝기가 모두 변경되는 것이 좋습니다. 이것이 내가 추천하는 것입니다!