Даже если ваш ImageSource не является BitmapImage, вы все равно можете применить его к BitmapSource
, который является базовым классом для всех классов растрового изображения WPF, таких как BitmapImage, BitmapFrame, WriteableBitmap, RenderTargetBitmap и т. д. (см. здесь ).
Итак, если ваш ImageSource на самом деле является BitmapSource (а не DrawingImage или D3DImage), следующий метод преобразует его в массив байтов с помощью указанного BitmapEncoder (например, PngBitmapEncoder):
public byte[] ImageSourceToBytes(BitmapEncoder encoder, ImageSource imageSource)
{
byte[] bytes = null;
var bitmapSource = imageSource as BitmapSource;
if (bitmapSource != null)
{
encoder.Frames.Add(BitmapFrame.Create(bitmapSource));
using (var stream = new MemoryStream())
{
encoder.Save(stream);
bytes = stream.ToArray();
}
}
return bytes;
}
Что бы вы хотели сделать с этим? Если вы просто хотите обработать данные из Excel-файла, я бы экспортировал мой Excel-файл в csv-файл (в Excel 2016: Файл> Экспорт> Изменить тип файла> CSV (через запятую)).
Разделитель, используемый для разделения данных, зависит от настроек вашей системы (у меня установлена точка с запятой, чтобы исключить неприятные ситуации с запятыми в ячейках).
Преимущество CSV-файла заключается в том, что вы можете обрабатывать файл как любой другой текстовый файл.
Внутри actionPerformed-метода вашего JButton вы можете открыть файл, используя:
try (Scanner sc = new Scanner(new File("my_csv_file.csv"))) {
// do anything you want with the file using the scanner object
// for example, print all data to the screen:
// make sure you import java.util.Scanner, java.io.File and java.io.FileNotFoundException
// and catch a FileNotFoundException or throw it to be handled anywhere else
while (sc.hasNextLine()) {
String data[] = sc.nextLine().split(";");
for (String s : data) {
System.out.print(s + "\t");
}
System.out.println();
}
}