swt.graphics.ImageLoader.save () не очищен? - PullRequest
1 голос
/ 23 марта 2009

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

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

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

1 Ответ

1 голос
/ 23 марта 2009

Принцип верен, но вы можете попытаться сохранить его, как 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;
}

Примечание. Когда сохраняет изображение , он использует следующий код:

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