Если вы знаете масштаб оси Y, это должно быть возможно.
Для скрининга вы можете сначала отфильтровать изображение с помощью цветового фильтра для каждой серии.
Второй шаг - собрать координаты всех оставшихся пикселей во временном изображении и преобразовать их в необходимый масштаб.
дано
- пиксель с координатами x, y
- смещение диаграммы происхождения в пикселях изображения xoffset, yoffset
- Масштаб вашей диаграммы, ось xscale, yscale
Вы можете рассчитать данные для этого пикселя (псевдокод)
pixelData.x := (x - xoffset) * xscale
pixeldata.y := (y - yoffset) * yscale
И после этого, сделайте некоторую интерполяцию, если ваша строка серии имеет ширину более одного пикселя (например, получите средние данные для всех пикселей в одном столбце или около того).
Обновление 1: псевдокод для наивного цветового фильтра, отфильтровывающего красные диаграммы
//set up desired color levels to filter out
redmin := 240;
redmax := 255
bluemin := 0;
bluemax := 0;
greenmin := 0
greenmax := 0;
//load source bitmap
myBitmap := LoadBitmap("Chartfile.bmp");
//loop over bitmap pixels
for iX := 0 to myBitmap.width-1 do
for iY := 0 myBitmap.height-1 do
begin
myColorVal := myBitmap.GetPixels(iX, iY);
//if the pixel color is inside your target color range, store it
if ((mycolorVal.r >=redmin) and (myColorVal.r <= redmax)) and
((mycolorVal.g >=greenmin) and (myColorVal.g <= greenmax)) and
((mycolorVal.b >=bluemin) and (myColorVal.b <= bluemax)) then
storeDataValue(iX, iY); //performs the value scaling operation mentioned above
end;