2009-03-23 1 views
1

Я использую этот класс swt.graphics.ImageLoader, чтобы сохранить файл как PNG:swt.graphics.ImageLoader.save() не покраснел?

ImageLoader loader = new ImageLoader(); 
loader.data = new ImageData[] { m_imgdat }; 
loader.save(selected, SWT.IMAGE_PNG); 

Но иногда файл я получаю неполон. последняя строка пикселей черная, а некоторые программы (photoshop) отказываются открывать ее вообще.
Есть ли что-то, что мне не хватает? Как я могу сказать этому классу, чтобы очистить файл и закрыть его?

ответ

1

Принцип является правильным, но вы можете попытаться сохранить его как ImageDialog делает:

Смотрите его buttonPressed() метод:

try 
{ 
    ImageData imageData = new ImageData(new ByteArrayInputStream JavaDoc(this.newImageRawData)); 
    if (imageData.type != this.requiredImageType) 
    { 
     ImageLoader imageLoader = new ImageLoader(); 
     imageLoader.data = new ImageData[] { imageData }; 
     ByteArrayOutputStream JavaDoc baos = new ByteArrayOutputStream JavaDoc(); 
     imageLoader.save(baos, this.requiredImageType); 
     this.newImageRawDataInRequiredFormat = baos.toByteArray(); 
    } 
    else 
    { 
     this.newImageRawDataInRequiredFormat = this.newImageRawData; 
    } 
} 
catch (SWTException swte) 
{ 
    this.newImageRawDataInRequiredFormat = null; 
} 

Примечание: Когда saves an image, он делает использование следующий код:

try 
    { 
    File JavaDoc file = new File JavaDoc(returnedFileName); 
    FileOutputStream JavaDoc out = new FileOutputStream JavaDoc(file); 
    out.write(currentImageRawData); 
    out.flush(); 
    out.close(); 
}