2017-10-30 27 views
0

슬라이더를 통해 사용자가 편집 할 수있는 이미지 (.tif, 회색 값 16 비트)를 표시하고 싶습니다. 표시된 이미지는 변경 사항에 직접 반응해야하므로 사용자는 자신이 이미지에 대해 무엇을하고 있는지 알 수 있습니다.C에서 편집 가능한 이미지 표시 #

현재 모든 변경 사항이있는 새 파일을 만들고 최신 파일을 표시하는 것만으로도 끔찍한 해결책입니다.

내 생각은 원본 픽셀 데이터를로드하고 저장하지 않는 임시 파일에 저장 한 다음 슬라이더의 매개 변수를 저장하고 원래의 매개 변수를 적용하여 저장합니다. 이미지 (결국에는 필터가 이미지 세트에 사용되기 때문에).

+0

웹 양식? MVC? WPF? Win-Forms? – trailmax

+0

왜 임시 파일을 사용 하시겠습니까? 왜 메모리에있는 이미지를 편집하지 않는가? –

+0

필자는 필자가 반드시 원하지는 않지만 프로그래밍에 익숙하지 않고 nontemp 파일이 작동하지 않는 것 같아서 ... 데이터를 표시하기 위해 일시적으로 데이터를 저장해야하는 위치를 모르겠다 - 일부 "장소" 예 picturebox는 액세스하고 읽을 수 있습니다. 또한 나는 당신이 메모리에서 이미지를 편집하여 무엇을 의미하는지 잘 모르겠다. – sterlingberger

답변

0

이미지가 파일이 아닙니다. 파일에있는 Image를 표시하지만 Image 객체에 파일을로드 한 후에는 편집 된 이미지를 파일에 저장해야 할 때까지 파일을 다시 사용하지 마십시오.

이미지를 표시한다고 말합니다. winforms를 사용하면서 PictureBox 컨트롤을 사용하고 있다고 가정합니다. 그렇지 않은 경우, 이미지를 표시하도록 지시 한 클래스가 있습니다.

Image imageToDisplay = GetImageToDisplay(); 
this.PictureBox1.Image = imageToDisplay; 

는 GetImageTodisplay는 파일을 읽고

System.Drawing.Image GetImageToDisplay() 
{ 
    FileStream imageStream = new FileStream(this.GetImageFileName(), FileMode.Open); 
    System.Drawing.Image image = new Image(imageStream); 
    return image; 
} 

은 분명히 당신은 또한 슬라이더를 이미지로 돌아갑니다. 슬라이더 클래스는 언급하지 않지만 새로운 슬라이더 값에 대해 양식에 알리는 것은 분명히 객체입니다.

void OnSliderValueChanged(object sender, int sliderValue) 
{ 
    Image displayedImage = this.PictureBox1.Image; 
    this.ProcessSliderChanged(image, sliderValue); 
} 

지금까지는 새 파일이 생성되지 않았습니다. 따라서 ProcessSliderChange이어야합니다. 다행히도 그것은 당신이 직접 만든 함수입니다. 새 슬라이더 값에 따라 이미지를 변경하면됩니다. 파일 처리와 아무것도하지 말고 당신이

void ProcessSliderChange(System.Drawing.Image image, int sliderValue) 
{ // what do you want to do with the image? 
    // make it darker? move it? change contrast? 
} 

불행하게도 이미지 클래스 이미지를 편집 할 수있는 많은 기능이없는 새 파일을받지 않습니다, 나는 당신이 행동 기능을 가진 라이브러리가 있다고 가정 System.Drawing.Image 개체. 이러한 기능을 사용하여 이미지를 변경하십시오.

+0

고맙고 직설적이며 작동한다! – sterlingberger