Если вы хотите, чтобы белые части были невидимыми, лучший способ - использовать фильтры изображений и сделать белые пиксели прозрачными, здесь обсуждается здесь с помощью @PhiLho с некоторыми хорошими образцами, если вы хотите изменить размер ваше изображение так, чтобы границы не имели белых цветов, вы можете сделать это с четырьмя простыми циклами, этот маленький метод, который я написал для вас, делает трюк, обратите внимание, что он просто обрезает верхнюю часть изображения, вы можете написать остальные ,
private Image getCroppedImage(String address) throws IOException{
BufferedImage source = ImageIO.read(new File(address)) ;
boolean flag = false ;
int upperBorder = -1 ;
do{
upperBorder ++ ;
for (int c1 =0 ; c1 < source.getWidth() ; c1++){
if(source.getRGB(c1, upperBorder) != Color.white.getRGB() ){
flag = true;
break ;
}
}
if (upperBorder >= source.getHeight())
flag = true ;
}while(!flag) ;
BufferedImage destination = new BufferedImage(source.getWidth(), source.getHeight() - upperBorder, BufferedImage.TYPE_INT_ARGB) ;
destination.getGraphics().drawImage(source, 0, upperBorder*-1, null) ;
return destination ;
}
Другие предлагали транзакционную NTFS, которая подходит для развертывания в Vista или более поздних версиях. Если вам нужна поддержка XP (или более ранней версии), лучшим решением будет временный файл с последующим перемещением (переименованием).
Ответ на этот аналогичный вопрос дает дополнительную информацию: Атомарность File.Move
Более новые версии Windows позволяют использовать транзакции .
Посмотрите на Background Intelligent Transfer Service в Windows Server 2003. Она обеспечивает механизм заданий, которые могут быть приостановлены и возобновлены даже после перезапуска.
Вот несколько примеров ее использования в .NET: